-3

ユーザーが間違った入力 (文字) を誤って入力した場合、正しい入力が与えられるまでプログラムを何度もループさせたいのですが、以下のコードではエラーが発生します。何か案は?

catch (InputMismatchException e) {
      input.nextLine();
      while (!input.hasNextInt()) {
            System.out.print("Enter the number of people in the circle: ");
            numberOfPeople = input.nextInt();
      }
}

エラー出力:

Exception in thread "main" java.util.InputMismatchException at 
java.util.Scanner.throwFor(Scanner.java:840) at 
java.util.Scanner.next(Scanner.java:1461) at 
java.util.Scanner.nextInt(Scanner.java:2091) at 
java.util.Scanner.nextInt(Scanner.java:2050)
4

2 に答える 2

1

APIを参照してください。

取得したトークンが予想される型のパターンと一致しないこと、またはトークンが予想される型の範囲外であることを示すために Scanner によってスローされます。

これは、正しいタイプを読み取っていないために発生します。

Scanner#hasNextInt()を使用して、次のようなことを行うことをお勧めします(try-catch ブロックは使用しないことに注意してください)。

if (input.hasNextInt()) {
    numberOfPeople = scanner.nextInt();
}
else {
    input.next();
    continue;
}

next()を使用する理由 Java ドキュメントがScannerについて述べているため:

スキャナーが InputMismatchException をスローすると、スキャナーは例外の原因となったトークンを渡さないため、他の方法でトークンを取得またはスキップできます。

于 2013-05-29T15:56:16.963 に答える
0

以下のようなことができます

for(int i=1;i<n;i++)
{
try
{
//code for taking the input from user
}
catch(InputMismatchException exception)
{
 //Equivalently keeping the same value of i 
--i;
}

}
于 2013-05-29T15:57:39.123 に答える