Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 von Max4000

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

:rolleyes: sorry, meine dummheit...

Ich kriege dann

java.util.NoSuchElementException: No line found

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

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]

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)


  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

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

Danke, ich habs jetzt gelöst.

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.