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 Zitieren
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 Zitieren
Max4000 Geschrieben 3. August 2009 Autor Geschrieben 3. August 2009 sorry, meine dummheit... Ich kriege dann java.util.NoSuchElementException: No line found Zitieren
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 Zitieren
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] Zitieren
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. Zitieren
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) Zitieren
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 Zitieren
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 Zitieren
Max4000 Geschrieben 4. August 2009 Autor Geschrieben 4. August 2009 Danke, ich habs jetzt gelöst. Zitieren
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 Zitieren
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(); } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.