Warum verursacht Scanner.nextInt() einen Fehler

Status
Nicht offen für weitere Antworten.

AmunRa

Gesperrter Benutzer
Hallo ich hab folgendes Problem

Die Methode nextInt() der Klasse java.util.Scanner verhält sich nicht so wie ich dies erwarte

Kurzer programm Ausschnitt in der mein Problem zusammen gefasst wird.



Code:
import java.util.*; 

class test{ 
    
      public static void main(String [] args){ 
    	  Scanner sc= new Scanner(System.in);
    	while (true){
    		int i=0;
    		System.out.println("Choose 1,2,3");
    		String s = sc.nextLine();
    		try{
    			i = Integer.parseInt(s);
    		}catch(Exception e){
    			System.out.println(e+"Failure");
    		}
    			if (i==1){
    				System.out.println("nerf");
    			}
    			if (i==2){
                                                System.out.println("Please enter age");
    				int j= sc.nextInt();
    				System.out.println("2");
    			
    			}
    			if (i==3){
    				System.out.println("Exit");
    				System.exit(0);
    			}
    		}
    		
    		
    		
    	
    	  
      }
}

Wenn man zuerst 2 eingibt und danach eine andere Zahl wird automatisch bei neuem Eintritt in die Schleife ein NumberFormatException geworfen warum.


ein Weiteres Programm wo der Fehler sogar zu einer dauerschleife führt ist dieses.
Wenn man hier keine Zahl eingibt ist das programm in einer Dauerschleife

Code:
import java.util.*; 

class test{ 
    
      public static void main(String [] args){ 
    	  Scanner sc= new Scanner(System.in);
    	  boolean corr=false;
    		do{
    			corr=false;
    			System.out.println("Geben sie ihr alter ein");
    			try{
    				sc.nextInt();
    			}catch(InputMismatchException e){
    				System.out.println(e+"Bitte nur Zahlen eingeben");
    				corr=true;
    			}
    		}while (corr);
    	
    	  
      }
}

Warum?

Danke für die Antwort

LG
AmunRa
 
G

Gast

Gast
Also bei mir klappt der Scanner wie er soll. Dein Beispiel 2 klappt wunder bar und beispiel auch, sobald man die Klammern richtig gesetzt hat und den zweiten sc.nextInt() gelöscht hat.
 

AmunRa

Gesperrter Benutzer
@Gast
Bin jetzt etwas verwirrt, da ich absichtlich die Klammersetzung so gemacht hab




Ein Workarround für das Problem hab ich bereits gefunden, in dem Ich immer mit nextLine und parseInt arbeite, aber nextInt methode verhällt sich eigentlich ziemlch seltsam.
 
G

Gast

Gast
Okay, vergiss das mit den Klammern. War ein Copy/Paste Fehler. Aber das zweite readInt ist weiterhin eine fehlerquelle. Ohne das klappt auch beispiel 1 einwandfrei.
 

AmunRa

Gesperrter Benutzer
ich weis das, das nextInt den Fehler den ich beschreibe verursacht aber warum?
Ich versuch nun noch einmal mein Problem genuer zu beschreiben.


Beim Beispiel 1.

Ich gebe als erstes 1 ein, dann habe ich kein Problem

wenn ich nun 2 eingebe, werde ich nach dem Alter gefragt nach eingabe des Alters springt er nun wieder an den Schleifen anfang und sollte dort wieder auf die auswahl warten, doch dies tut er nicht, sondern wirft sofort einen Fehler


Warum? Genau diese verhalten bei dem Code verstehe ich nicht, da das eigentlich nicht passieren soll.


Bei Beispiel zwei


Wenn ich eine Zahl eingebe funktioniet das Programm fehlerfrei (Ich weiß das das Programm nonsense ist, da die Eingabe in keine Variable geschrieben wird ist aber eigentlich für den Fehler irrelevant)

wenn ich aber einen Buchstaben oder ein sonderzeichen eingebe kommt es bei mir zu einer Dauerschleife, was meiner Meinung nach nicht passieren soll

LG
AmunRA
 

Ebenius

Top Contributor
Gast: Benutzt Du Linux/UNIX? Dann liegts an der Konsole. Die schreibt normaler Weise immer erst auf den Strom, wenn LF kommt. Was dagegen hilft erfährst Du hier.

Hoffentlich hab ich das Problem richtig überflogen. :)
 

AmunRa

Gesperrter Benutzer
Nein ich benutze Windows XP

und das ganze is ja eigentlich ja auch kein wirkliches Problem, da ich sowieso schon ein Workarraoud gefunden habe gegen die Dauerschleife, nur wundert mich dieses Verhalten, da ich dafür keine Erklärung habe.

Aber vielleicht kann mir es jemand verständlich machen
 

AmunRa

Gesperrter Benutzer
Hab jetzt das zweite Beispiel ach noch auf einem Linux getestet und dort hab ich das problem auch
 

AmunRa

Gesperrter Benutzer
Hab jetzt nach langer Zeit gefunden was ich gesucht hatte:

Das ganze ist ein Bug, wenn eine Fehlerhafte eingabe gemacht wird,dann wird der Buffer nicht gelehrt.

siehe Hier

Um das ganze zu umgehen muss man einfach in den catch Block der nextInt() methode den Befehl Die Methode
sc.nextLine() aufrufen diese liest dann die Fehlerhafte eingabe aus und leert damit den Buffer. und beim nächsten Schleifendurchlauf funktioniert die nextInt() methode dann wieder normal.

Das ausgebesserte Programm:

Code:
import java.util.*; 

class test{ 
    
      public static void main(String [] args){ 
int alter=0;
         Scanner sc= new Scanner(System.in); 
         boolean corr=false; 
          do{ 
             corr=false; 
             System.out.println("Geben sie ihr alter ein"); 
             try{ 
               alter= sc.nextInt();    //<- Wenn hier die Fehlerhafte eingabe gemacht wird (z.B ein Buchstabe)
             }catch(InputMismatchException e){ 
                System.out.println(e+"Bitte nur Zahlen eingeben"); 
 sc.nextLine();   //<- Ohne diese Zeile würde bei einer Fehlerhaften eingabe beider nextInt 
 //Methode eine Dauerschleife entstehen
                corr=true; 
             } 
          }while (corr); 
        
         
      } 
}

Damit kommt dann keine Dauerschleife heraus
 

Murray

Top Contributor
AmunRa hat gesagt.:
Das ganze ist ein Bug,
Das wurde zwar als Bug gemeldet, aber nicht als solcher anerkannt:

Bug Database hat gesagt.:
State
11-Closed, Not a Defect, bug

Evaluation
nextInt, nextFloat, nextDouble and nextLine all work the way the spec says
they should. No, nextInt/Fload/XYZ should not suck the remaining new line
character(s) and the nextLine() must read in the remaining of the buffer.
 

AmunRa

Gesperrter Benutzer
Stimmt ich habs auch gelesen,
muss aber erlich sagen, dass es mir sehr schwer fällt dieses verhalten sinvoll einzusetzten.


(vlt noch wenn man nicht von System.in liest aber sonst?)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Was verursacht den Rückgabewert false bei der Methode ready() eines BufferedReaders Java Basics - Anfänger-Themen 9
T Fehlerhafter Datenstrom verursacht Exeption Java Basics - Anfänger-Themen 4
T Thread 2x starten verursacht Exception Java Basics - Anfänger-Themen 3
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben