do-while-Schleife läuft doppelt, try catch fehler

Lil_Ber

Mitglied
Hey,

ich habe wohl einen Fehler im Code und kann ihn selbst leider nicht finden.
Die Ausgabe ist:
1) "Integer eingeben"
2) "<<Ungültiges Zeichen>>"
3) "Integer eingeben"

Erst nach dieser Ausgabe kann ich etwas eingeben. Ich möchte aber die Zeilen 2 und 3 nur erneut ausgeben, wenn der Benutzer keinen int eingibt.

Wo ist mein Fehler??
Java:
public static int readInt(){

        boolean error;
        int eingabe =0;
            do{
                error = false;
                System.out.println("Bitte int eingeben: ");
           
                try{
                    eingabe = Integer.parseInt(scan.nextLine());
                   
                }catch(NumberFormatException except){
                    System.out.println("<<Ungültiges Zeichen>>");
                    error=true;
                    except=null;
                }
            }while(error);
        return groesse;
    }

Vielen Dank im voraus!!
 
Das ist ja nur ein Codeausschnitt. Kann es sein dass du beim ersten parseInt(scan.nextLine()) noch etwas von einer Eingabe vorher erwischst ?
 
Hey Bitfehler! Ja ich denke mir dass es hilfreich wäre...leider sind es sieben Klassen, also es ist schon sehr groß...(für meine verhältnisse jedenfalls 😀 )
 
Und es wäre sicher auch ganz hilfreich wenn du zu Testzwecken einfach mal die ganze Exception ausgeben könntest statt nur der Fehlermeldung "Falsche Eingabe"
 
Das ist das alte leidige Thema, dass der Input-Buffer nicht leer ist.

Mach ein

Code:
while(scanner.hasNext())
{
    sc.next();
}

vor die Schleife und alles wird gut.

Gruß

Claus
 
Hallo Clauß,

ich bin wirklich blutiger Anfänger....wenn ich den Code vor die Schleife kopiere, kann ich endlos viel eingeben, aber es kommt zu keiner Ausgabe in der Schleife mehr.

Das ist die Exception (ohne deine Verbesserung): java.lang.NumberFormatException: For input string: ""

Wahrscheinlich hab ich was falsch gemacht, oder?
 
Zuletzt bearbeitet:
Also wenn man nur den Codeausschnitt von oben sieht scheint alles richtig.... Wie wird denn der Scanner angelegt ? Poste mal ein bisschen mehr Code.
 
Danke an Alle! Habe es gerade hinbekommen: Hatte den Scanner vor den Methoden mit "private static Scanner.." angelegt. Jetzt hab ich ihn direkt in die Methode...und jetzt funktionierts 🙂🙂🙂


Was lerne ich daraus? Ab jetzt immer mehr Code posten 😀

Vielen Dank!!
 
Das ist aber quatsch, da du so jedes mal nen neuen Scanner erzeugst und ihn denke ich am Ende nicht wieder schließt, wodurch es schnell zu Ressourcen-Engpässen kommen kann. Dein Problem war, das im Scanner ein leerer String war, daher solltest du den scanner vor der do-while-Schleife leeren, daher sollte es auch dann funktionieren.

Mach die Schleife von Thallius VOR deine Do-while-Schleife, nicht in diese.
 

Zurück
Oben