循环用户输入,直到输入一个非零正整数



我是一个完全的初学者,我正在尝试创建一个while循环,不断要求用户输入,直到它得到一个非零正整数,然后继续下一部分。到目前为止,我得到的是:

System.out.println("Enter the speed of the vehicle in "
+ "miles per hour: ");
while (keyboard.hasNext())
{
if (keyboard.hasNextInt())
{
speed = keyboard.nextInt();
while (speed <= 0)
{
System.out.println("Please enter a positive nonzero number: ");
speed = keyboard.nextInt();
}
}
else
{
System.out.println("Please enter a number: ");
speed = keyboard.nextInt();
}
}

现在,当我运行它并输入整数以外的任何值时,它会打印出行";请输入一个数字,";但随后我立即得到InputMatchException错误,构建失败。如果我输入了一个负数或零,它确实会提示我输入一个正数,直到我输入为止,但随后代码就会停止执行并保持运行,同时无限期地不做任何事情,而不是在循环之后继续前进,循环只是从另一个系统开始。输出提前感谢您的帮助。

您需要使用之前输入的非int,然后尝试读取以下输入:

else
{
System.out.println("Please enter a number: ");
// consume and ignore the previous non-int input
keyboard.next();
}

您可以这样做。通过使用Scanner#nextLine((方法请求一个数值的字符串表示,然后将string#matches((方法与一个小正则表达式(regex(一起应用,以验证提供了一个正数值("\d+"表达式(,例如:

String speedString = "";
while (speedString.isEmpty()) {
System.out.println("Enter the speed of the vehicle in miles per hour: ");
speedString = keyboard.nextLine().trim();
if (!speedString.matches("\d+") || Integer.valueOf(speedString) < 1) {
System.err.println("Invalid speed value supplied!n" 
+ "Please enter a 'positive' non-zero number.n");
speedString = "";
}
}
int speed = Integer.parseInt(speedString);  

最新更新