我需要让用户从控制台输入一个肯定的非零整数,我将在该程序中用作产品编号。在输入验证期间使用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类实现我的输入验证,以便它可以在所有情况下正常工作?
Bhesh古隆的解决方案完美地工作。如果有人知道另一种方式,我仍然会感兴趣。 – user1834529