2017-12-16 19 views
1

私は自分の入力から3つの数字、1、2、3を受け入れようとしています。それ以外のものは無効でなければなりません。私は方法を作りましたが、なぜそれがうまくいかなかったのか分かりません。何を変えなければならないのですか?Javaスキャナ入力の有効化

int number; 
do { 
    System.out.println("Enter 1, 2 or 3"); 
    while (!scanner.hasNextInt()) { 
     System.out.println("Invalid input!"); 
    } 
    number = scanner.nextInt(); 
} while (number == 1 || number == 2 || number == 3) 
return number; 

答えて

2

あなたのループロジック

do { 
    ... 
} while (number == 1 || number == 2 || number == 3); 

限り答えは有効あるとして用ループでの滞在が必要です。あなたはあなたの状態を反転したい:

do { 
    ... 
} while (!(number == 1 || number == 2 || number == 3)); 

または個々のコンポーネントを反転するDe Morgan's Lawを使用します。

do { 
    ... 
} while (number != 1 && number != 2 && number != 3); 

また、ScannerhasNextInt戻りfalseは、あなたがスキャナをオフ無効な入力を取る必要がある場合たとえば、あなたが無視するnextLineとなります。そうでなければ、無限ループになります:

while (!scanner.hasNextInt()) { 
    System.out.println("Invalid input!"); 
    scanner.nextLine(); // This input is ignored 
} 
+0

これは私が探している答えです。 11分後に私はそれを受け入れるでしょう – TeodorKolev

+0

ビット問題があります。私がレタースタートエンドレスループを入力した場合 – TeodorKolev

+0

@TeodorKolevうん、それは私の編集についてだった:-) – dasblinkenlight

関連する問題