2016-12-09 8 views
-3
while(!isValid){ 
    System.out.println("Enter house number: "); 
    if(input.hasNextInt()){ 
     houseNum=input.nextInt(); 
     isValid=true; 
    } 
    else{ 
     System.err.print("Wrong input. Try again"); 
     isValid=false; 
    } 
} 

コードがあります。私はそれが例外をスローしないようにしたいと思うし、ユーザーに整数の正しい入力フォーマットを入力するよう依頼し続けます。しかし、無限ループに入り続けます。スキャナ入力の検証Java

+0

ブール値フラグを削除します。 'while(input.hasNextInt()'と 'input.nextInt()'を使ってください。 – TheLostMind

+0

'hasNextInt()'はそれを正確に行っています...ユーザがすでに有効な整数を入力していることを確認してください。 – GhostCat

+0

@ TheLostMindとGhostCat私はあなたの要点を知っていますが、間違った入力を受け取った場合には、再度入力を求めてもらいたいと思います。 –

答えて

0

elseブロックにinput.nextLine();を追加します。

無限ループに陥るのではなく、バッファに次の値を渡すことができます。

0

私は、正しい解決策があると信じて:

while (!isValid) { 
     System.out.println("Enter house number: "); 
     if (input.hasNextInt()) { 
      houseNum = input.nextInt(); 
      isValid = true; 
     } 
     else { 
      System.err.print("Wrong input. Try again"); 
      isValid = false; // not really necessary; isValid was already false 
     } 
     input.nextLine(); 
    } 

私は関係なく、番号の読み取りが成功したかどう入力から行をスキップしません。番号が読み取られなかった場合、これは間違った行全体をスキップします。数字が読み込まれた場合は、数字の後の改行をスキップするだけです。