Max4000 Geschrieben 3. August 2009 Geschrieben 3. August 2009 (bearbeitet) Hallo! Wieso kriege ich gleich "test" ausgegeben? import java.util.NoSuchElementException; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundException { leseDatei(); } private static void leseDatei() throws NoSuchElementException, FileNotFoundException { Scanner scan = new Scanner(new File("personen.src")); String[][] zeilearray = new String[2048][4]; try { while (scan.nextLine() != null) { while (scan.nextLine() != null) { String zeile = scan.nextLine(); String temp[] = zeile.split("\\;"); for (int i = 0; scan.nextLine() != null; i++) { for (int j = 0; j < 4; j++) { zeilearray[i][j] = temp[j]; } } } for (int i = 0; i < 2048; i++){ for (int j = 0; j < 4; j++){ System.out.println(zeilearray[i][j]); } } } } catch (Exception a) { System.out.println("test"); } } } Auszug aus meiner "personen.src" 1;Person1;1.1.1950;Ort1 2;Person2;2.1.1950;Ort2 3;Person3;3.1.1950;Ort3 4;Person4;4.1.1950;Ort4 5;Person5;5.1.1950;Ort5 6;Person6;6.1.1950;Ort6 7;Person7;7.1.1950;Ort7 8;Person8;8.1.1950;Ort8 9;Person9;9.1.1950;Ort9 10;Person10;10.1.1950;Ort10 11;Person11;11.1.1950;Ort11 12;Person12;12.1.1950;Ort12 13;Person13;13.1.1950;Ort13 14;Person14;14.1.1950;Ort14 15;Person15;15.1.1950;Ort15 16;Person16;16.1.1950;Ort16 usw. bis 2048 Bearbeitet 3. August 2009 von Max4000
Amstelchen Geschrieben 3. August 2009 Geschrieben 3. August 2009 catch (Exception a) { System.out.println("test"); } Wieso kriege ich gleich "test" ausgegeben? üblicherweise gibt man an dieser stelle die Message von a aus, weil da naturgemäss eine oder mehrere fehlerursachen drinstehen es wäre ja auch sinnlos, eine fehlerbehandlung einzubauen, um sie dann garnicht zu verwenden. s'Amstel
Max4000 Geschrieben 3. August 2009 Autor Geschrieben 3. August 2009 sorry, meine dummheit... Ich kriege dann java.util.NoSuchElementException: No line found
Amstelchen Geschrieben 3. August 2009 Geschrieben 3. August 2009 und in welcher zeile wird die Exception effektiv geworfen? ich verstehe ausserdem nicht, warum du zeilen in ineinander geschachtelten schleifen einliest und nicht in einer einzelnen. while (scan.nextLine() != null) { while (scan.nextLine() != null) { String zeile = scan.nextLine(); damit dürftest du meinem verständnis nach ja schon mal zumindest 2 zeilen ignorieren; die erste sowieso und dann jede zweite. somit sollte es logisch erscheinen, dass du irgendwann über das dateiende hinausliest, was in einer Exception gipfelt. s'Amstel
Max4000 Geschrieben 3. August 2009 Autor Geschrieben 3. August 2009 ich frage mich so langsam auch, was ich da fabriziert habe. so sieht es jetzt aus: try { while (scan.next() != null) { String zeile = scan.next(); String temp[] = zeile.split("\\;"); for (int i = 0; scan.next() != null; i++) { for (int j = 0; j < 4; j++) { zeilearray[i][j] = temp[j]; } } } for (int i = 0; i < 2048; i++){ for (int j = 0; j < 4; j++){ System.out.println(zeilearray[i][j]); } } } catch (Exception a) { System.out.println(a); } Ich kriege dafür auch eine neue Exception: java.util.NoSuchElementException Will man mir damit sagen, dass er die Datei nicht findet? Denn ein nomales "println" gibt was aus. Vielleicht hab ich ja einen generellen Überlegungsfehler drin? Ich will die Datei auslesen und ein mehrdimensionales Array erzeugen. array[zeile][nr,name,alter,ort]
speedi Geschrieben 4. August 2009 Geschrieben 4. August 2009 catch (Exception a) { e.printStackTrace(); } Probiers mal damit. Das liefert dir den Fehler inkl. dem Weg der zu dem Fehler geführt hat.
Max4000 Geschrieben 4. August 2009 Autor Geschrieben 4. August 2009 Hm, ok... Und was sagt mir das jetzt? java.util.NoSuchElementException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at Main.leseDatei(Main.java:39) at Main.main(Main.java:16)
perdian Geschrieben 4. August 2009 Geschrieben 4. August 2009 while (scan.next() != null) { String zeile = scan.next(); [...] Es gibt keine weitere Zeile. Der Check in deiner While-Schleife stellt stellt nur sicher, dass noch eine Zeile vorhanden ist wenn du die Schleife betrittst. Der nächste scan.next Aufruf hingegen kann durchaus fehlschlagen, wenn keine Zeile mehr vorhanden ist. Wenn du zunächst einmal ins Javadoc von Scanner geguckt hättest wäre dir das auch aufgefallen: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html#next%28%29" data-cite="\"http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html#next%28%29">NoSuchElementException - if no more tokens are available
flashpixx Geschrieben 4. August 2009 Geschrieben 4. August 2009 Die Frage ist eher, warum zwei ineinander geschachtelte While-Schleifen, die das geleiche machen. Er geht für den ersten Datensatz in die While-Schleife und liest dann ab dem zweiten die Datei vollständig. Wenn er hinter dem letzten Datensatz steht, geht er wieder in die äußere Schleife und wirft dann zu recht eine "No Element Exception" Phil
flashpixx Geschrieben 4. August 2009 Geschrieben 4. August 2009 Wäre schön, wenn Du Deine Lösung postest, dann hat vielleicht mal später jemand etwas davon Gruß Phil
Max4000 Geschrieben 4. August 2009 Autor Geschrieben 4. August 2009 Na klar: import java.util.NoSuchElementException; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundException { try { leseDatei(); } catch (Exception e){ } } private static void leseDatei() throws NoSuchElementException, FileNotFoundException { Scanner scan = new Scanner(new File("personen.src")); String[][] zeilearray = new String[2048][4]; try { for (int i = 0; scan.hasNextLine(); i++) { String zeile = scan.nextLine(); String temp[] = zeile.split("\\;"); for (int j = 0; j < 4; j++) { zeilearray[i][j] = temp[j]; } } for (int i = 0; i < 2048; i++){ for (int j = 0; j < 4; j++){ System.out.println(zeilearray[i][j]); } } } catch (Exception a) { a.printStackTrace(); } }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden