Veröffentlicht 3. August 200916 j 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 200916 j von Max4000
3. August 200916 j 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
3. August 200916 j sorry, meine dummheit... Ich kriege dann java.util.NoSuchElementException: No line found
3. August 200916 j 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
3. August 200916 j 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]
4. August 200916 j catch (Exception a) { e.printStackTrace(); } Probiers mal damit. Das liefert dir den Fehler inkl. dem Weg der zu dem Fehler geführt hat.
4. August 200916 j 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)
4. August 200916 j 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
4. August 200916 j 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
4. August 200916 j Wäre schön, wenn Du Deine Lösung postest, dann hat vielleicht mal später jemand etwas davon Gruß Phil
4. August 200916 j 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(); } }
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.