2017-10-05 18 views
0

次のコードで文字列と二重入力を拒否しないのはなぜですか? どうすれば変更できますか?文字列と二重入力を拒否する方法は?

int option; 

do { 
    System.out.printf("Welcome %s, select an option\n", theUser.getFirstName()); 
    System.out.println("1: Show previous transactions"); 
    System.out.println("2: Withdraw"); 
    System.out.println("3: Deposit"); 
    System.out.println("4: Transfer"); 
    System.out.println("5: Exit"); 
    System.out.print("\nEnter Option: "); 
    option = input.nextInt(); 

    if (option != 1 && option != 2 && option != 3 && option != 4 && option != 5){ 
     System.out.println("\nError. Please choose a valid number"); 
    } 
} while(option != 1 && option != 2 && option != 3 && option != 4 && option != 5); 
+0

何らかの理由で、私のプログラムの残りの部分は、 | :( – JAmes

答えて

3

あなたが整数を取得するメソッドを作成し、それが本当にあなたはまた、より他

if(option < 0 || option > 5) 
+1

'catch'ブロックで' nextLine() 'を呼び出して、無効な入力をクリアする必要があります。 – Mark

0

を使用して、ifブロックを縮小する可能性が1

このような
private int getOption() { 
    int option; 
    try { 
     option = scanner.nextInt(); 
    } 
    catch (InputMismatchException e) { 
     System.out.println("This was not valid input... " + scanner.next()); 
     return getOption(); 
    } 
    return option; 
} 

であることを確認できました例外をトリガするには、入力を確認するために正規表現のビットを使用することもできます:

Scanner scn = new Scanner(System.in); 
String input; 
do{ 
    System.out.print("Enter option (1-5): "); 
    input = scn.nextLine(); 
    if(!input.matches("[1-5]+")) 
     System.out.println("Invalid input, please enter only 1 - 5"); 
}while(!input.matches("[1-5]+")); 

//int option = Integer.parseInt(input); //if you need option to be an integer 

サンプル出力:

  • 空の任意の他の入力オフ

    Enter option (1-5): 3.3 
    Invalid input, please enter only 1 - 5 
    Enter option (1-5): 6 
    Invalid input, please enter only 1 - 5 
    Enter option (1-5): abc def 
    Invalid input, please enter only 1 - 5 
    Enter option (1-5): 
    Invalid input, please enter only 1 - 5 
    Enter option (1-5): 77 
    Invalid input, please enter only 1 - 5 
    Enter option (1-5): 3 
    
    Process completed. 
    

    Iは1から5までだけ厳密に一致する値を午前ので、ブロックなど

    • ストリング入力
    • 10進値
    • 範囲外の数値(<1および>5)。
  • 関連する問題