Try/Catch in While-Schleife mit Scanner - Hilfe!

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo ich habe folgendes Problem:

Ich möchte eine beliebige Zahl vom Benutzer eingeben (mit Hilfe eines Scanners) und durch eine Try-Catch-Anweisung kontrollieren lassen, ob die Eingabe nicht evtl. Buchstaben oder Zeichen anstatt einer Zahl war. Mit folgendem Quelltext funktioniert das wunderbar:

Code:
import java.util.Scanner;
import java.util.InputMismatchException;

public class TryCatch
{
	public static void main(String[] args)
	{
		Scanner meinScanner = new Scanner(System.in);
	        System.out.println("Bitte eine Zahl eingeben:");

		try
		{
			int x = meinScanner.nextInt();
			System.out.println("Ihre Zahl lautet: "+x);
		}
	
		catch(InputMismatchException e)
		{
			System.out.println("Das ist keine Zahl gewesen!");
		}
	}
}

Wenn ich jedoch möchte, dass der Benutzer solange die Eingabe tätigen kann, bis er eine Zahl eingegeben hat schreibe ich folgendes:

Code:
import java.util.Scanner;
import java.util.InputMismatchException;

public class TryCatch
{
	public static void main(String[] args)
	{
		Scanner meinScanner = new Scanner(System.in);
		System.out.println("Bitte eine Zahl eingeben:");
		boolean control = false;
		
		while(control==false)
		{
			try
			{
				int x = meinScanner.nextInt();
				System.out.println("Ihre Zahl lautet: "+x);
				control = true;
			}
	
			catch(InputMismatchException e)
			{
      				System.out.println("Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:");
			}
		}	

	}
}

Das Resultat artet leider in die Endlosschleife

Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:
Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:
Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:
Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:
Das ist keine Zahl gewesen! Wiederholen Sie die Eingabe:
[...]


aus anstatt in die erneute Eingabemöglichkeit.

Was hab ich falsch gemacht? Ich komm einfach nich auf den Fehler...

Thx & Gruß
DaSaeschOnAir
 

Murray

Top Contributor
Das Problem besteht darin, dass die fehlerhafte Eingabe immer noch im Eingabepuffer steht; der nächste Aufruf von nextInt bekommt also wieder den gelichen String. Um das zu verhindern, muss man den Wert auslesen:

Code:
        try
         {
            int x = meinScanner.nextInt();
            System.out.println("Ihre Zahl lautet: "+x);
            control = true;
         }
   
         catch(InputMismatchException e)
         {
        	 String errStr = meinScanner.next();
                 System.out.println( errStr + " ist keine Zahl! Wiederholen Sie die Eingabe:");
         }

Noch ein paar Anmerkungen:
1. Bool'sche Werte sollte man nicht mit Konstanten vergelichen, sondern direkt benutzen, also nicht
Code:
 while( control == false) {
sondern
Code:
 while( !control) {
2. Auf die Variable control könnte man auch komplett verzichten:
Code:
while ( true) {
        try {
            int x = meinScanner.nextInt();
            System.out.println("Ihre Zahl lautet: "+x);
            break; //--- Eingabe OK, Schleife kann beendet werden
        } catch(InputMismatchException e) {
            String errStr = meinScanner.next();
            System.out.println( errStr + " ist keine Zahl! Wiederholen Sie die Eingabe:");
        }
}
 
B

Beni

Gast
"nextInt" versucht vom unterliegenden Stream zu lesen. Wenn das nicht geht (weil kein int in der Eingabe ist), dann bleibt alles beim alten, und es wird eine Exception geworfen.
Wenn aber alles beim alten blieb, kann beim nächsten Aufruf auch kein int eingelesen werden... und schon steckt man in einer Endlosschleife.

Versuch mal im catch-Block einfach die aktuelle Eingabe zu lesen (Methode next), um die falsche Eingabe fortzuwerfen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
K Zweifacher Try-Catch Allgemeine Java-Themen 6
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
T rießiger try - catch - Block Allgemeine Java-Themen 13
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
C Schachbrett mit while-schleifen Allgemeine Java-Themen 7
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
A Swing Taschenrechner while Schlaufe Allgemeine Java-Themen 12
I NullPointer während while(){} Allgemeine Java-Themen 4
N Frage zur while-Schleife Allgemeine Java-Themen 18
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
D ProcessBuilder und die while() Allgemeine Java-Themen 3
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
J Schachbrett mit for- oder while-Schleife Allgemeine Java-Themen 22
V Problem in While-Schleife Allgemeine Java-Themen 3
J Konsolen Anwendung mit while(true) Allgemeine Java-Themen 6
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
M Problem mit while/do Schleife Allgemeine Java-Themen 12
N while Schlauf und ActionEvent Allgemeine Java-Themen 2
L Exception auslösen, um while Schlaufe zu verlassen(rxtx.org) Allgemeine Java-Themen 6
F While(true)-Schleife im JPanel Allgemeine Java-Themen 9
N vergleich mit while und for schleife Allgemeine Java-Themen 7
B while mit BufferedReader beenden Allgemeine Java-Themen 5
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
F Zweifache For-Schleife Allgemeine Java-Themen 6
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
F Foreach und for - Schleife Allgemeine Java-Themen 10
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben