Scannerと無限ループを使用してユーザーから整数を取得しようとしています。私はこの問題を解決するための解決策を知っていますが、なぜ私の最初のアプローチが適切に機能しないのでしょうか?例外がスローされなくなるまでJavaの試行とキャッチ
これは最初の繰り返しで機能しますが、「無効、再試行してください」というメッセージは永遠に画面に表示されます。 Scanner API docから
Scannerと無限ループを使用してユーザーから整数を取得しようとしています。私はこの問題を解決するための解決策を知っていますが、なぜ私の最初のアプローチが適切に機能しないのでしょうか?例外がスローされなくなるまでJavaの試行とキャッチ
これは最初の繰り返しで機能しますが、「無効、再試行してください」というメッセージは永遠に画面に表示されます。 Scanner API docから
:
スキャナがInputMismatchExceptionをスロー、スキャナはそれを取得またはいくつかの他の方法を介してスキップすることができるように、例外の原因となったトークンを渡しません。
だから、無効なトークンは、別の例外と別のと別の原因、まだそこにある...
Scanner myScanner = new Scanner(System.in);
int x = 0;
while(true){
try{
System.out.println("Insert a number: ");
x = myScanner.nextInt();
break;
}catch(InputMismatchException e){
System.out.println("Invalid, try again.");
myScanner.next(); // skip the invalid token
// continue; is not required
}
}
Scanner myScanner = new Scanner(System.in);
int x = 0;
while(true){
try{
System.out.println("Insert a number: ");
x = Integer.parseInt(myScanner.next());
break;
}catch(NumberFormatException e){
System.out.println("Invalid, try again.");
// continue is redundant
}
}
ありがとう!私はスキャナの細かいことは知らなかった。それは今働いています:D –