Falscheingabe abfangen - Endlosschleife

F

Firephoenix

Gast
Bin komplett neu hier, also nicht so böse sein zu mir ^^

Als Neueinsteiger in Java (früher schon Anfangserfahrung mit Delphi etc gemacht - gute OOP Kenntnisse)
will ich mich jetzt auch in Java einarbeiten.

Dementsprechend habe ich mit einem einfachem Additionsprogramm angefangen und dieses weiter ausgebaut. Mittlerweile habe ich einen einfachen Rechner der mit 2 Zahlen rechnen kann.
Diesen wollte ich jetzt um das Abfangen von Falscheingaben erweitern.
Das ist der Programmanfang:

Java:
import java.util.*;
import java.io.IOException;

public class Test {


	public static void main(String[] args)
	throws IOException
	{
		int a = 0;
		float b=0 ,c=0;
		boolean falsch;
		Scanner scanner = new Scanner(System.in);
		falsch = true;
		
		System.out.println("Geben sie bitte die erste Zahl ein:");
		do
		{
			try
			{
				b = scanner.nextFloat();
				falsch = true;
			}
			catch (InputMismatchException teste)
			{
				System.out.println("Falsche Eingabe");
				falsch = false;
			}
		}
		while(falsch);
.
.
.

Problem macht jetzt diese Schleife:
Java:
		do
		{
			try
			{
				b = scanner.nextFloat();
				falsch = true;
			}
			catch (InputMismatchException teste)
			{
				System.out.println("Falsche Eingabe");
				falsch = false;
			}
		}
		while(falsch);

Sinn ist es, bei einer falschen Eingabe den Fehler abzufangen und auf eine neue Eingabe zu warten.
bei einem Test im Debugger ist mir aber aufgefallen, dass die Zeile
Java:
b = scanner.nextFloat();
einfach übersprungen wird, ohne eine neue Eingabe abzufragen.
Daher läuft das Programm bei einer richtigen Eingabe weiter, bei einer Falschen kommt die Meldung "Falsche Eingabe" in einer Dauerschleife.

Für Hilfe wäre ich sehr dankbar, da meine Bücher und auch google mich zu keiner Lösung führten - meine Eigene Javakenntnis reicht hier leider nicht aus. Daher wären Antworten nett, auch andere Lösungsvorschläge nehme ich gerne an.

Lg,
Firephoenix
 

Ziegenpeter

Aktives Mitglied
Das löst das Problem von ihm allerdings noch nicht!

Du musst am Ende deines catch-Blockes noch hinschreiben:
Java:
scanner.nextLine();

Das Problem ist sonst nämlich, dass er nicht in die nächste Zeile geht und somit immer einen leeren String liest (oder ggf. auch was anderes je nachdem wie lang dein Falscheingabe ist). Dadurch kannst du auch keine Eingabe mehr machen, da er ja schon eine hat.
 
F

Firephoenix

Gast
Ihr lagt aber beide richtig, der scanner.nextLine() hat aber das Problem mit dem Endlosdurchlauf gelöst. Die boolean-Variable sollte so auch stimmen.
Jetzt leistet der Quellcode auch das was ich von ihm will, hab ein paar Ecken auch nochmal geändert.

hier die korrekte Version:

Java:
import java.util.*;
import java.io.IOException;

public class Test {


	public static void main(String[] args)
	throws IOException
	{
		int a = 0; //Auswahlvariable
		float b=0 ,c=0; //Rechenvariable
		boolean falsch = true; //Variable zum Abfangen falscher eingaben (Schleifenabbruch)
		Scanner scanner = new Scanner(System.in); //Eingabeobjekt
		
		//Eingabe der ersten Zahl
		do
		{
			try
			{
				System.out.println("Bitte die erste Zahl eingeben");
				b = scanner.nextFloat();
				falsch = false;
			}
			catch (InputMismatchException teste)
			{
				System.out.println("Falsche Eingabe");
				scanner.nextLine();
				falsch = true;
			}
		}
		while(falsch);
		//Eingabe der ersten Zahl Ende
		falsch = true;
		//Eingabe der zweiten Zahl
		do
			try
			{
				System.out.println("Bitte die zweite Zahl eingeben");
				c = scanner.nextFloat();
				falsch = false;
			}
			catch (InputMismatchException teste)
			{
				System.out.println("Falsche Eingabe");
				scanner.nextLine();
				falsch = true;
			}
		while  (falsch);
		//Eingabe der zweiten Zahl Ende
		falsch = true;
		//Eingabe der Rechenauswahl
		do
			try
			{	
				System.out.println("Zahl 1: " + b + " Zahl 2: " + c);
				System.out.println("Für Addition drücken sie die 1");
				System.out.println("Für Subtraktion drücken sie die 2");
				System.out.println("Für Multiplikation drücken sie die 3");
				System.out.println("Für Division drücken sie die 4");
				a = scanner.nextInt();
				falsch = false;
			}
			catch (InputMismatchException teste)
			{
				System.out.println("Falsche Eingabe");
				scanner.nextLine();
				falsch = true;
			}
			while  (falsch);	
			//Eingabe der Rechenauswahl Ende
			falsch = true;
			//Rechnungsblock

			switch (a)
			{
				case 1: //Addition
				{
					System.out.println("Addition");
					System.out.println("Das Ergebnis von " + b + "+" + c + " ist: " + (b+c));
					break;
				}
				case 2:  //Subtraktion
				{
					System.out.println("Subtraktion");
					System.out.println("Das Ergebnis von " + b + "-" + c + " ist: " + (b-c));
					break;
				}
				case 3: //Multiplikation
				{
					System.out.println("Multiplikation");
					System.out.println("Das Ergebnis von " + b + "*" + c + " ist: " + (b*c));
					break;
				}
				case 4: //Division
				{
					System.out.println("Division");
					System.out.println("Das Ergebnis von " + b + "/" + c + " ist: " + (b/c));
					break;
				}
				default: System.out.println("Bitte geben sie eine Zahl zwischen 1 und 4 ein");
			}
	
	}

}

nächster Schritt wird dann sein, das ganze in eine weitere Schleife zu packen, und um andere Funktionen zu erweitern. Das Thema hier hat sich aber erledigt.
 

Farbenfroh

Mitglied
Hi!
Sorry für das Ausgraben dieses alten Schinkens.
Habe gerade ein mehr oder weniger identisches Programm und gerade nach längerer Suche endlich meinen Fehler gefunden:
statt
Java:
import java.util.*;
import java.io.IOException;
hatte ich nur den Scanner importiert:
Java:
import java.util.Scanner;
import java.io.IOException;

Ich bekam dann die Fehlermeldung im Catch-Block:
"inputmismatchexception cannot be resolved to a type"

Gut, durch importieren des kompletten util-Paketes hat es dann geklappt.
Aber was ich mich nun frage: Wenn ich nicht das ganze Paket importieren will, welche Klasse aus der util-Sammlung hätte ich gezielt importieren müssen um die Fehlermeldung zu beheben??
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Bei Falscheingabe erneute Eingabe ermöglichen Java Basics - Anfänger-Themen 5
Dimax SizeLimitExceededException abfangen Java Basics - Anfänger-Themen 6
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
L Erste Schritte IndexOutOfBounce abfangen? Java Basics - Anfänger-Themen 17
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
B Erste Schritte Abfangen eines Fehlers/Ausbrechen aus der Schleife Java Basics - Anfänger-Themen 12
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
D Input/Output Runtime().exec fehler abfangen Java Basics - Anfänger-Themen 4
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
S java tastendrücke direkt abfangen und printen Java Basics - Anfänger-Themen 3
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
OnDemand Exception Abfangen Java Basics - Anfänger-Themen 5
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
H Wie kann ich STRG+V abfangen und ändern Java Basics - Anfänger-Themen 2
B Exception abfangen Java Basics - Anfänger-Themen 33
D [jni] loadLibrary Exception abfangen Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
W Tastatureingabe abfangen Java Basics - Anfänger-Themen 15
S Exception abfangen Java Basics - Anfänger-Themen 2
N Fehlerquelle leere ArrayList elegant abfangen Java Basics - Anfänger-Themen 3
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
M Datentypen Fehler abfangen Java Basics - Anfänger-Themen 5
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
sylo Warnings abfangen Java Basics - Anfänger-Themen 2
H MouseEvent abfangen Java Basics - Anfänger-Themen 9
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Spin Exception abfangen Java Basics - Anfänger-Themen 3
M Frage zum Abfangen ungültiger Werte Java Basics - Anfänger-Themen 9
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
A FileNotFoundException abfangen? Java Basics - Anfänger-Themen 3
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
Spin Abfangen von Fehlern Java Basics - Anfänger-Themen 9
M Exception abfangen? Java Basics - Anfänger-Themen 3
G Eine exception mit negativen zahlen abfangen ? Java Basics - Anfänger-Themen 11
I Dialog - "Ja" / "Nein" abfangen Java Basics - Anfänger-Themen 3
G SQLServerException abfangen Java Basics - Anfänger-Themen 2
C alle möglichen Datumseingaben im Textfeld abfangen Java Basics - Anfänger-Themen 12
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
M Abfangen von java.lang.NumberFormatException Java Basics - Anfänger-Themen 6
T String: NeueZeile (" ") , Break etc. abfangen Java Basics - Anfänger-Themen 2
B Programm würft Exception, kann sie aber nicht abfangen! Java Basics - Anfänger-Themen 25
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
M jToggleButton Klick abfangen ohne den Button zu deaktivieren Java Basics - Anfänger-Themen 2
B Tastatur abfangen Java Basics - Anfänger-Themen 11
U Pfeiltasten abfangen Java Basics - Anfänger-Themen 2
B Ausnahmen abfangen Java Basics - Anfänger-Themen 3
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
T jcombobox, item-selektierung abfangen Java Basics - Anfänger-Themen 5
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
S von CommandLine übergebene Parameter abfangen? Java Basics - Anfänger-Themen 12
V Mausklick mit rechter Taste abfangen? Java Basics - Anfänger-Themen 8
C falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
L GUI - Tastaturereignisse abfangen ohne Fokus? Java Basics - Anfänger-Themen 8
D Frage zum abfangen von Exceptions Java Basics - Anfänger-Themen 5
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
F Exception in while-Schleife abfangen? Java Basics - Anfänger-Themen 2
F 2 numberformatexception abfangen? Java Basics - Anfänger-Themen 20
ven000m Exception abfangen Java Basics - Anfänger-Themen 9
H JTabel Selectionen abfangen Java Basics - Anfänger-Themen 2
L Java App + Exception abfangen Java Basics - Anfänger-Themen 2
G Fehler abfangen Java Basics - Anfänger-Themen 2
D Falscheingaben abfangen Java Basics - Anfänger-Themen 8
M Negative Werte abfangen Java Basics - Anfänger-Themen 18
G Abfangen von Falscheingaben Java Basics - Anfänger-Themen 4
C Exception abfangen->Klappt nicht ;( Java Basics - Anfänger-Themen 2
S Division durch null abfangen :freak: Java Basics - Anfänger-Themen 14
EagleEye Exception abfangen Java Basics - Anfänger-Themen 15
S Hilfe bei Endlosschleife Java Basics - Anfänger-Themen 2
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
noah1407 endlosschleife Java Basics - Anfänger-Themen 7
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
sserio Endlosschleife ja nein? Java Basics - Anfänger-Themen 13
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
S Endlosschleife - Warum? Java Basics - Anfänger-Themen 1
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben