Exception verwerfen!

Mirar

Mitglied
Guten Abend zusammen!

Bei einer kleinen Übung, bei welcher ich ein Programm entwickeln will, welches aus 3 eingegeben Zahlen die größte Erkennt und ausgibt, bin ich auf folgendes Problem gestoßen:

Wenn ich folgenden Code ausführe und dabei der Variable num1 einen Buchstaben statt einer Zahl gebe, die Exception geworfen wird. Ab dann wird natürlich die Schleife wiederholt, doch statt erstmal meine Eingabe abzuwarten springt das Programm direkt wieder in den Catch-Block und landet somit in einer Endlos-Schleife...

Meine Frage ist also: Was muss ich machen damit im Falle einer falschen Eingabe auch wirklich auf meinen 2. Versuch gewartet wird und er nicht sofort in den Catch-Block geht...

Hier der Code:
Java:
import java.util.Scanner;

public class BiggestNumber { 

      private static int num1, num2, num3;
      static Scanner scanner = new Scanner(System.in);
      private static boolean repeat;     

      public static void main(String[] args) {

            System.out.println("Geben Sie 3 Zahlen ein! (Zahl mit Enter bestätigen)");

            do {
                  try {
                        repeat = false;        
                        System.out.print("Zahl1: ");
                        num1 = scanner.nextInt();
                        
                        System.out.print("\nZahl2: ");
                        num2 = scanner.nextInt();

                        System.out.print("\nZahl3: ");
                        num3 = scanner.nextInt();

                  } catch (Exception e) {
                        System.out.println("Versuche es nochmal, jedoch nur mit ganzen Zahlen!");
                        repeat = true;
                  }
            }while(repeat);

            if (num1 >= num2) {
                  if (num1 >= num3) {
                        System.out.println(num1);
                  }
            } else if (num2 >= num1) {
                  if (num2 >= num3) {
                        System.out.println(num2);
                  }
            } else if (num3 >= num1) {
                  if (num3 >= num2) {
                        System.out.println(num3);
                  }
            }
      }
}

Vielen Dank im Voraus
 
Hi

Hab das jetzt mal durchgespielt und soweit ich das sehe ist das Problem ungefähr folgendes. Wenn du versuchst einen int aus dem Scanner zu lesen aber da zum Beispiel ein "b" steht kriegst du ne Exception, fällst in den Catch-Block und beginnst wieder von vorne. Da das "b" aber nicht abgeholt wurde steht es immer noch im Scanner als eingegebener Wert bereit und wird bei nächstem Aufruf von scanner.nextInt() gleich wieder zu einem Fehler. Daraus ergibt sich dann deine Schleife.
Ich konnte in meinem Versuch das Problem umgehen indem ich im Catch-Block mit der Zeile "scanner.next();" den ignorierten Eingabewert abhole.

Wenn das dann mal funktioniert scheinst du aber im unteren Teil noch ein Problem zu haben. Wenn ich die Zahlen num1 = 1, num2 = 3 und num3 = 5 verwende komme ich in den ersten else-if-Block, falle dann aber im if (num2 > num3) durch und erhalte keine Ausgabe.

Gruss
Flo
 
Zurück