2016-03-22 6 views
2

配列に3つの要素を追加しようとしていますが、ユーザーの入力が唯一の番号であることを確認したいと思います。これまでのところ私は3つの数字を入力できるforループを持っています。ユーザーが数字ではない入力を入力すると、1を引くので、3つの数字しか得られないことを確認します。私のコードを実行した後、例外エラー(スレッド "main" java.util.InputMismatchExceptionの例外)が発生します。誰かが私が間違っていることを教えてください。前もって感謝します!ユーザーの入力が数字だけであることを確認して要素を配列に追加する方法はありますか?

 int[] arr = new int[3]; 

    for (int i = 0 ; i < arr.length ; i++) { 
      try 
      { 
       System.out.println("Please enter a number: "); 
       arr[i] = scan.nextInt(); 
      } 
      catch(Exception ex) 
      { 
       i--; 
       System.out.println("Please enter a valid number"); 
       arr[i] = scan.nextInt(); 
      } 
     } 
+0

あなたの入力は何ですか? –

答えて

2

次のトークンがscan.nextInt()がトークンを消費しません呼び出し、intではありません。代わりに、scan.next()catchブロック内)を呼び出して、非intを使用する必要があります。次のトークンはint型であるかどうかをチェックするために何かのように、

for (int i = 0; i < arr.length; i++) { 
    try { 
     System.out.printf("Please enter a number for arr[%d]:%n", i); 
     arr[i] = scan.nextInt(); 
    } catch (Exception ex) { 
     i--; 
     System.out.printf("%s is not a number.%n", scan.next()); 
    } 
} 
+0

私はarr [%d]を使って各数字をターゲットにするのが好きです。どうもありがとう!! – progx

2

使用hasNextInt()。 次のコードを参照してください:

for (int i = 0; i < arr.length; i++) { 
    try { 
     System.out.printf("Please enter a number: "); 
     if(scan.hasNextInt()){ 
      arr[i] = scan.nextInt(); 
     }else{ 
      i--; 
      System.out.println(scan.next() + " is not a number.",); 
     } 
    } catch (Exception ex) { 
    } 
} 
関連する問題