string array überprüfen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • string array überprüfen

    hallo,

    ich versuche die zeilenbreite mittels string array zu überprüfen, aber es klappt nicht, sowie ich es haben möchte. kann mir bitte jemand weiterhelfen?

    Quellcode

    1. String line[] = new String[100];
    2. if (line[i].length() != line[1].length()){ // wenn alle zeilen nicht die selbe breite haben, dann eingabe = false. aber genau hier klappt es nicht.
    3. eingabe = false;
    4. }


    lg Composer
  • Dein Codeschnipsel ist leider zu kurz, kein Mensch weiß was in i drinsteht. Hinzukommt das "klappt nicht" eine ziemlich schlechte Fehlerbeschreibung ist. Außerdem vermute ich, dass du wichtige Zeilen weggelassen hast, da du das line-Array nirgends mit Inhalt füllst.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Ich denke mal, dass dein Fehler woanders liegt. Poste bitte mal dein ganzes Programm oder einen größeres Ausschnitt.
    Ich habe mal deinen Code ausprobiert, und bei mir hat er wunderbar funktioniert:

    Quellcode

    1. public class array {
    2. public static void main(String argv[]) {
    3. String line[] = new String[100];
    4. int i;
    5. boolean eingabe = true;
    6. line[0] = "0";
    7. line[1] = "1";
    8. line[2] = "2";
    9. line[3] = "3";
    10. line[4] = "4";
    11. line[5] = "10";
    12. for(i=0;i<=5;i++) {
    13. if(line[i].length() != line[0].length()) {
    14. eingabe = false;
    15. }
    16. }
    17. System.out.println(eingabe);
    18. }
    19. }
    Alles anzeigen
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • hallo,

    so sieht der code der aus:

    Quellcode

    1. public class AsciiImage{
    2. String line[] = new String[101];
    3. private int i = 100;
    4. private int x = 0;
    5. private int y = 0;
    6. private boolean eingabe = true;
    7. AsciiImage()
    8. {
    9. }
    10. void addLine(String pass)
    11. {
    12. line[i] = pass;
    13. y++;
    14. if (line[i].length() != line[0].length() ){
    15. eingabe = false;
    16. }
    17. i--;
    18. }
    19. void print() {
    20. x = line[100].length();
    21. if (!(x > 0 && x <= 100) || !(y > 0 && y <= 100))
    22. eingabe = false;
    23. if (eingabe == false)
    24. System.out.println("FALSCHE EINGABE");
    25. else
    26. for(int n = i++; n < 100; n++){
    27. System.out.println(line[n]);
    28. }
    29. }
    30. public int getZA(){
    31. return y;
    32. }
    33. public int getZL(){
    34. return x;
    35. }
    36. public boolean getBW(){
    37. return eingabe;
    38. }
    39. }
    Alles anzeigen


    Quellcode

    1. class AsciiReader {
    2. public static void main (String[] args)
    3. {
    4. Scanner sc = new Scanner(System.in);
    5. AsciiImage reader = new AsciiImage();
    6. while (sc.hasNextLine())
    7. {
    8. reader.addLine(sc.nextLine());
    9. }
    10. reader.print();
    11. if (reader.getBW() == true){
    12. System.out.print(reader.getZA()+" "+reader.getZL());
    13. }
    14. }
    15. }
    Alles anzeigen


    ein zweites problem ist, wenn ich über 100 zeilen code als eingabe benutze, dann bekomme ich auch eine fehlermeldung, anstatt der meldung "falsche eingabe". irgendwo liegt der denkfehler.


    lg Composer
  • Quellcode

    1. if (line[i].length() != line[0].length() )

    Dadurch wird der Fehler verursacht. Du hast den Array nicht initialisiert und deswegen gibts an line[0] noch keinen Wert. Du nimmst die Daten von line[0] aber als Vergleich, deswegen wird eine Exception (Fehler) geworfen.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • willst du denn die breite vergleichen? oder willst du etwas anderes vergleichen? Oder besser gefragt; Was willst du mit diesem Vergleich erreichen?
    Die Tatsache ist, dass du im ersten Durchlauf nur auf line[100] zugreifen kannst, da keinem anderen Feld in deinem Array ein Wert zugewiesen ist.

    EDIT:
    Was mir auch noch aufgefallen ist: Warum benutzt du in der while Schleife für die Eingabe hasNextLine(). AFAIK ist das in diesem Fall sinnlos, da du bei der Objekterzeugung keinen Datentyp von begrenzter Länge angegeben hast.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • also ich wollte, dass alle zeilen die gleich breite haben und keines der zeilenanzahl und zeilenbreite der wert 100 überschreitet.
    das mit dem zeilenbreite funktioniert es, wenn man line[100] nimmt, aber mit dem zeilenanzahl klappt es nicht, ob ich so überprüfe:

    Quellcode

    1. if (!(x > 0 && x <= 100) || !(y > 0 && y <= 100))


    Die Tatsache ist, dass du im ersten Durchlauf nur auf line[100] zugreifen kannst, da keinem anderen Feld in deinem Array ein Wert zugewiesen ist.

    im array 100 ist ja auch kein wert zugewiesen, oder irre ich mich?

    Was mir auch noch aufgefallen ist: Warum benutzt du in der while Schleife für die Eingabe hasNextLine(). AFAIK ist das in diesem Fall sinnlos, da du bei der Objekterzeugung keinen Datentyp von begrenzter Länge angegeben hast.

    weil ich eine bestimmte datei durchlaufen lasse. zb. mit dem befehl java AsciiReader.java < eingabedatei
    in der eingabedatei kommen die ganzen zeilen hinein.
    wenn die zeilenanzahl über 100 ist, dann bekomme ich eine fehlermeldung. aber statt der fehlermeldung vom compiler, soll die systemausgabe "falsche eingabe" erscheinen, was leider nicht tut.
  • Composer schrieb:

    m array 100 ist ja auch kein wert zugewiesen, oder irre ich mich?

    Doch, list[100] bekommt im ersten Durchlauf der Methode die erste Zeile zugewiesen:

    Quellcode

    1. line[i] = pass;

    Du kannst es dir ja mal mit dem Debugger anschauen.


    "Composer" schrieb:

    weil ich eine bestimmte datei durchlaufen lasse. zb. mit dem befehl java AsciiReader.java < eingabedatei
    in der eingabedatei kommen die ganzen zeilen hinein.
    wenn die zeilenanzahl über 100 ist, dann bekomme ich eine fehlermeldung. aber statt der fehlermeldung vom compiler, soll die systemausgabe "falsche eingabe" erscheinen, was leider nicht tut.

    Das hängt damit zusammen, dass du erst zu spät überprüfst, ob mehr als 100 Zeilen eingegeben wurden. Wichtig ist, dass du die Überprüfung vor folgender Zeile vornimmst, da sonst i zu klein wird und auf felder zugreift, die nicht mehr existieren.

    Quellcode

    1. line[i] = pass;

    Die Überprüfung könnte zum Beispiel hier stehen:

    Quellcode

    1. void addLine(String pass)
    2. {
    3. if(i<1) {
    4. System.out.println("Falsche Eingabe");
    5. System.exit(0);
    6. }
    7. line[i] = pass;
    8. ...
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.