在输入验证期间使用Scanner类测试空白输入

时间:2012-11-19 01:21:25

标签: java java.util.scanner

我需要让用户从控制台输入一个正的非零整数,我将在程序中将其用作产品编号。

如果我输入任何非整数值,程序会正确进入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类实现输入验证,以便它适用于所有情况?

1 个答案:

答案 0 :(得分: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)
//...