2017-12-18 22 views
0

なぜ私のコードでエラーが起こりますか?ユーザーが間違った番号を入力した場合、コードで新しい有効な番号を入力しないでください。好きなものを新しい価値に変えさせないかのように思えます。この問題をどうやって解決することができますか?スキャナCatch文を試すと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(); 
     } 
    } 
} 

コンソール出力:

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_キャッチで??? – vinS

+1

これは仕様です - 追加した追加のスキャンを行い、有効な入力が得られるまでループを追加する必要があります – ronhash

答えて

0

入力のスキャンcatch節では、最高のアイデアではないと思われます。 do-whileループを使用することをお勧めします。有効なIntegerが最後に入力されたことを確認したときに状態が変更されるbooleanフラグになる可能性があります。 ScannerhasNextInt()メソッドを使用して、正しい入力が提供されているかどうかを確認し、本当に必要でない場合は例外をスローすることもできます。ここ はronhashの答えのほとんど変化ですが、do-whileループを使用して:

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) 

編集:前の1はinneficientと間違っていたので、私は、コードを編集しました。

+0

ありがとう、これを考えてください^^^ –

+0

私たちの回答が参考になった場合は、あなたの質問にすべての答えが含まれていると思うなら、それを受け入れられた答えとして左側にチェックすることができます。 –

1

これは、whileループとの代替です:

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

助けてくれてありがとう! –

+0

問題ありません...喜んで助けてください、あなたはまた答えを受け入れることができます:) – ronhash

関連する問題