2016-11-03 6 views
4

Scannerと無限ループを使用してユーザーから整数を取得しようとしています。私はこの問題を解決するための解決策を知っていますが、なぜ私の最初のアプローチが適切に機能しないのでしょうか?例外がスローされなくなるまでJavaの試行とキャッチ

これは最初の繰り返しで機能しますが、「無効、再試行してください」というメッセージは永遠に画面に表示されます。 Scanner API docから

答えて

7

スキャナが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 
    } 
} 
+0

ありがとう!私はスキャナの細かいことは知らなかった。それは今働いています:D –

4

@LukeLee's solutionの代替:

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 
    } 
} 
関連する問題