2017-12-18 5 views
0

Warum gibt mein Code mir einen Fehler? Wenn der Benutzer eine falsche Nummer eingegeben hat, darf der Code nicht eine neue gültige Nummer eingeben? Scheint, als ob es mich nicht Lieblings zu einem neuen Wert ändern lässt. Wie kann ich dieses Problem umgehen?Scanner versuchen Catch-Anweisung Ergebnisse in java.util.InputMismatchException

package RobB; 

import java.util.Scanner; 

public class FavoriteNum { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int[] num = new int[10]; 
     int favorite = 0; 

     System.out.print("Enter your favorite number: "); 
     try { 
      favorite = scan.nextInt(); 
     } 
     catch (Exception e) { 
      System.out.println("Enter an integer!"); 
      System.out.print("Enter your favorite number: "); 

      favorite = scan.nextInt(); 
     } 

     for (int i = 0; i < 10; i++) { 
      System.out.print("Enter a random number (" + Math.abs(((i + 1) - 10)) + " to go): "); 
      num[i] = scan.nextInt(); 
     } 
    } 
} 

Console Ausgabe:

Enter your favorite number: 11.1 

Enter an integer! 

Exception in thread "main" Enter your favorite number: java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at RobB.FavoriteNum.main(FavoriteNum.java:21) 
+0

_Scan_ in Fang ??? – vinS

+1

Dies ist die Spezifikation - Sie sollten den zusätzlichen Scan, den Sie hinzugefügt haben, hinzufügen und fügen Sie einige While-Schleife, bis Sie eine gültige Eingabe haben – ronhash

Antwort

0

Scanning für die Eingabe in catch Klausel scheint nicht die beste Idee zu sein. Ich würde vorschlagen, eine do-while Schleife zu verwenden und die Bedingung, die erlaubt, diese Schleife zu verlassen, könnte eine boolean Flagge sein, die Zustand geändert würde, als Sie bestätigten, dass die gültige Integer schließlich eingegeben worden ist. Sie können auch die Methode ScannerhasNextInt() in Betracht ziehen, um zu überprüfen, ob die richtige Eingabe bereitgestellt wurde, ohne irgendeine Ausnahme auszulösen, wenn dies in Ihrem Fall nicht wirklich notwendig ist. Hier ist eine kleine Variation von Antwort des ronhash, aber mit einer do-while Schleife:

boolean validInput = false; 
do { 
    try { 
     System.out.print("Enter your favourite number: "); 
     favorite = scan.nextInt(); 
     validInput = true; } 
    catch (Exception e) { 
     System.out.println("Enter an integer!"); } 
} while (!validInput) 

Edit: Ich habe das Code, weil der vorherige inneficient und falsch war.

+0

Danke, sollte der Gedanke an diese ^^^ –

+0

Wenn Sie unsere Antworten hilfreich finden, möchten Sie möglicherweise Upvoting in Betracht ziehen sie, und auch, wenn Sie denken, dass irgendeine Antwort Ihre ganze Frage bedeckt, können Sie es auf der linken Seite als eine akzeptierte Antwort ankreuzen. –

1

Dies ist eine Alternative mit einer while-Schleife:

boolean validInput = false; 
while (!validInput) { 
    try { 
     System.out.print("Enter your favourite number: "); 
     favorite = scan.nextInt(); 
     validInput = true; 
    } 
    catch (Exception e) { 
     System.out.println("Enter an integer!"); 
    } 
} 
+1

Danke für die Hilfe! –

+0

Keine Probleme ... glücklich zu helfen, können Sie auch die Antwort annehmen :) – ronhash

Verwandte Themen