Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern

Berg

Mitglied
Liebe Forenmitglieder,
wenn ich richtig recherchiert habe, soll man nur im Notfall auf Exceptions zurückgreifen.
Habe mir hier eine Variante überlegt (zusammengesucht) ohne Exception.
Der positive Fall funktioniert einwandfrei, der negative leider nicht
a) "irgendwie" läuft das mit dem Scanner endlos
b) selbst wenn dann nach dem Fehlerfall eine richtige Zahl einegegeben wird, klappt es trotzdem nicht.

>>> könnt ihr hier bitte Licht ins Dunkel bringen?

Vielen Dank & viele Grüße
Berg

Java:
//Ziel: Tastatur einlesen bis Integer-Wert erfolgreich eingelesen wurde
//Bei Erfolg den eingelsenen Wert in Variable a schreiben
//Bei Nichterfolg wiederholen, bis es klappt.

import java.util.*;
 
class IntegerEinlesen
{
	public static void main (String [] args )
	{
		int a=0, b=0 ,c=0;
		boolean EingabeOK= false;
	
		Scanner s = new Scanner(System.in);
		System.out.print("Zahl eingeben: ");
		do //Wiederhole Eingabe,bis ganze Zahl erfolgreich eingegeben wurde = EingabeOK auf true
		{
			if(s.hasNextInt()) //Prüfung ob nächster Teil des Eingabestrings als Integer interpretiert werden kann
			{
				a= s.nextInt();  //Wenn dem so ist, dann weise diesen Wert der Integer Variable a zu
				EingabeOK=true; //Markiere Eingabe als erfolgreich
				System.out.println("Das ist der Integer Wert der eingegebene wurde: "+ a);
			}
			else 
			{
				System.out.println("Falscheingabe, bitte erneut ganze Zahl eingeben");
				s.reset();
			} 
		} 
		while(EingabeOK == false);
		System.out.println("Fertig");
		s.close();
	}
}
 
verwendet mal statt [c]s.reset()[/c] mal [c]s.nextLine()[/c]

das sollte gehen.


[EDIT]reset Löscht dir nicht den Inhalt der eingegeben wurde.
Dadurch ist einfach in der nächsten iteration der schleife noch immer der alte inhalt und die Ueberprüfung auf int schlegt wieder fehl.
Scanner. nextLine() liest einfach den inhalt aus und dann wartet scanner wieder auf einen neuen input[/EDIT]
 
Zuletzt bearbeitet:
...super...danke für die flotte Hilfe !!!
s.nextLine() und alles funktioniert wie gewollt!

Würdest du die INT Eingabe auch so machen, oder gibt es da noch etwas viel eleganteres?

Vielen Dank & viele Grüße
Berg
 
naja ih würde gleich mal den String mit nextLine lesen und diesen dann zuvor z.B. mit Regex oder mit der methode Character.isDigit() überprüfen. Liegt aber daran, dass ich als ich begonnen hab zu Programmieren die Klasse Scanner nicht gekannt habe.

Diese Art wie du es gemacht hast ist schon in Ordnung

Nur die Weise mit Integer.parseInt und fangen einer Exception ist nicht schön und sollte daher vermieden werden.
 

Neue Themen


Zurück
Oben