1

プログラムで製品番号として使用するコンソールから、ゼロ以外の正の整数を入力するようにユーザーに依頼する必要があります。

整数以外の値を入力すると、プログラムは正しくwhileループに入ります。

0または負の整数を入力すると、プログラムは例外を正しくスローします(これは他の場所でキャッチして処理します)。

エンターキー(または行末文字)を押すだけで、プログラムがコンソールを別の行に移動したように見えます。エラーメッセージを表示するためにwhileループに入りたいです。hasNextInt()原因は、トークンが行末文字の入力でなくなるまで待機することだと思います。

private static void validateProductNumber() throws InvalidProductNumberException { 
    Scanner keyboard = new Scanner(System.in);
    int number;
    while(!keyboard.hasNextInt()) { 
        System.out.println("Number must be an integer. Try again. ");
        System.out.println("Enter a new number: ");
        keyboard.next(); 
    }
    number = keyboard.nextInt();
    if (number <= 0)
        throw new InvalidProductNumberException();
    newNumber = number;
}

Scannerクラスを使用して入力検証を実装し、すべての状況で正しく機能するようにする別の方法はありますか?

4

1 に答える 1

0

次のようにループを変更できます。

while(true) {        
    try {
        System.out.println("Enter a new number: ");
        //read the line and parse it
        number = Integer.parseInt(keyboard.nextLine());
        break; //break the loop if the input is a valid integer
    } catch(Exception ex) {
        //print the error message if the input is incorrect
        System.out.println("Number must be an integer. Try again. ");
    }
}
if (number <= 0)
//...
于 2012-11-19T01:34:08.583 に答える