txt reader Problem

Permafrost

Mitglied
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^

Java:
private static Animal reader() throws IOException {
        Scanner oScan = new Scanner(new File(oDatei));
        Animal oGetIn = null;
        Birthday oDate = new Birthday();
        String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();

        while(oScan.hasNext()){
            if (sName.equalsIgnoreCase("Katze")) {
                oGetIn = new Cat();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Hund")) {
                oGetIn = new Dog();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Maus")) {
                oGetIn = new Mouse();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
        }
        oScan.close();
        return oGetIn;
    }
 
In deiner while Schleife rufst du nirgends nochmal oScan.next() auf. Wenn die Schleife also einmal betreten wird (weil es noch nen Token gibt), dann wird sich an der Tatsache auch nichts mehr ändern.
 
soweit wie ich das sehe, geht er in die while-schleife rein, da noch etwas im Scanner rumliegt, aber du liest nie weitere Sachen mittels #next aus, daher wird es immer ein "hasNext" geben.
 
In Zeile 5 rufst Du drei mal next auf. D.h. Du hast schonmal drei Werte wech. Wenn Dir diese drei Werte reichen, brauchst Du auf dem Scanner garnix mehr aufzurufen. Ansonsten muss innerhalb der while-Schleife irgendwo ein nextXXX stehen, um die weiteren Werte auch einzulesen. Im Moment forderst Du den Nutzer zwar zu einer Neueingabe auf, holst sie Dir dann aber nirgends.
 
Ja, in Zeile 5 liest du schon aus dem Stream. Danach fragst du immer wieder obs noch mehr Werte gibt, die du dann aber nicht ausliest.

Nimm einfach die while Schleife raus, die brauchst du nicht.
 
im übertragenen sinn hast du soetwas
Java:
boolean keeprunning = true;

while (keeprunning) {
   doSomethingButStop();
}
 
hab ich gemacht jetzt liest er gar nix mehr...
ich lese das ja von einer erstellten text datei aus die selbst in meinem programm erstelt wirt und in der datei ist mom nur 2 katzen und ein hund drinnen kann es deswegen sein?
 
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^

Java:
private static Animal reader() throws IOException {
        Scanner oScan = new Scanner(new File(oDatei));
        Animal oGetIn = null;
        Birthday oDate = new Birthday();
        String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();

        while(oScan.hasNext()){
            // IN DIESER SCHLEIFE RUFST DU NIEMALS oScan.next() AUF
            // ERGO GIBT ES IMMER NOCH WAS UND DAS IST DIE ENDLOSSSCHLEIFE !
        }
        oScan.close();
        return oGetIn;
    }
also entweder auch im while next() rufen oder while schleife loeschen
 
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^

Java:
private static Animal reader() throws IOException {
        Scanner oScan = new Scanner(new File(oDatei));
        Animal oGetIn = null;
        Birthday oDate = new Birthday();
        // meinst du vielleicht das ???
        while(oScan.hasNext()){
             String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();
             if (sName.equalsIgnoreCase("Katze")) {
                oGetIn = new Cat();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Hund")) {
                oGetIn = new Dog();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Maus")) {
                oGetIn = new Mouse();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
        }
        oScan.close();
        return oGetIn;
    }
ohne deinen "neuen" code, der nicht geht wirds ein "ins blaue gerate" werden
 
wenn nur 3 datensätze drin stehen, zeige doch bitte mal den inhalt der datei .. im prinzip vermute ich gerade musst du nur nochmal sowas machen innerhalb der while-schleife (ohne berücksichtung von Fehlkonstellationen)

Java:
String sName;
String sNickname;
String sDate;

while (oScan.hasNext()) {
sName = oScan.next(); 
sNickname = oScan.next(); 
sDate = oScan.next();

//alles wie bisher
} //while
 
das ist die writer metode hilft die evtl etwas oder was bräuchtet ihr noch *lieb guck
Java:
    private static String[] writer(List<Animal> oZoo) {
        List<String> oTypes = new LinkedList<String>();
        PrintWriter oPW = null;
        String[] abSort = null;
        try {

            oPW = new PrintWriter(oDatei);

        } catch (IOException ex) {

            System.err.println("Konnte Datei nicht erstellen");
        }
        oTypes.addAll(getAnimalTypes(oZoo));
        for (String sTypes : oTypes) {

            List<String> animalNames = getAnimalNames(oZoo, sTypes);
            abSort = Sort(animalNames.toArray(new String[0]));
            for (int a = 0; a < abSort.length; ++a) {
                oPW.println("\r\n" + sTypes + ": \r\n");
                oPW.println(abSort[a]);

            }

        }

        oPW.close();
        System.out.println("Datei gespeichert!");


        return abSort;
    }
Hier ist der inhalt der datei
Code:
Katze: 

asldnfl 12.11.1986

Katze: 

uscho 12.11.1986

Hund: 

ljbasfl 12.11.1986
 
Zuletzt bearbeitet:
edit ok, hast editiert! 😀

edit²: gut dann schau dir mal Beitrag #11 und #12 an, dann solltest der Lösung schon näher kommen!
Du liest momentan nur einen Datensatz aus, verarbeitest den in der Schleife. Nun musst aber auch die anderen Daten auslesen, sonst is eben immer noch etwas nicht-verarbeitetes im Scanner enthalten!
 
er liest immer noch nix ein🙁
Java:
 private static Animal reader() throws IOException {
        Scanner oScan = new Scanner(new File(oDatei));
        Animal oGetIn = null;
        Birthday oDate = new Birthday();
        String sName, sNickname, sDate;

        while (oScan.hasNext()) {
        sName = oScan.next();
        sNickname = oScan.next();
        sDate = oScan.next();

        
            if (sName.equalsIgnoreCase("Katze")) {
                oGetIn = new Cat();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Hund")) {
                oGetIn = new Dog();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
            if (sName.equalsIgnoreCase("Maus")) {
                oGetIn = new Mouse();
                zoo.add(oGetIn);
                oGetIn.setNickname(sNickname);
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);
            }
        }
        
        return oGetIn;
    }

gerne doch
 
Zuletzt bearbeitet:
ich hab den fehler gefunden lach echt witzig find ich
Java:
if (sName.equalsIgnoreCase("Katze")) {

und neu :
Java:
if (sName.equalsIgnoreCase("Katze:")) {
 
wenn ich schon dabei bin da gefällt mir noch etwas nicht an meinem code hättet ihr ein beispiel wie ich das ändere da ja hier eh nicht geprüft wird ob die syntax richtig ist.
Java:
                if (!oDate.checkSyntax(sDate)) {
                    System.err.println("Bitte geben Sie erneut das Datum ein!");
                    
                }
                oGetIn.setBd(oDate);

ach hab schon eine lösung die zwar auch nicht so toll ist aber wenigstens sieht es besser aus.
Java:
                oDate.checkSyntax(sDate);
                oGetIn.setBd(oDate);
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben