[英]While loop with try-catch blocks doesn't wait for input in the try block after looping once
因此,我有一个方法getInput,它的目的是,请用户输入信息,使用try-catch来确保它是正确的数据类型(在这种情况下为int)并验证它是否在预定义的范围内。 问题是,当我输入一个字符串时,它会重复输入错误的消息,并在try {}中打印我要求输入的消息,然后直接捕获而不等待输入。 这是代码:
public static int getInput(String message, int lowerLimit, int upperLimit) {
while (true) {
int input;
try {
System.out.println(message);
input = scanner.nextInt();
if (lowerLimit > input && input > upperLimit) {
return input;
} else {
System.out.println("Incorrect input value, try again");
}
} catch (Exception e) {
System.out.println("Incorrect input, try again");
}
}
}
我知道还有其他可行的方法可以实现这一目标,但是我想知道为什么这种方法行不通-我认为应该这样做。 有任何想法吗?
if (lowerLimit > input && input > upperLimit)
这总是false
。 你的意思是
if (input >= lowerlimit && input <= upperLimit)
return input;
您观察到的行为源于以下事实:扫描程序(假设您正在使用java.util.Scanner
)仅在nextInt()
成功时才会前进。 这意味着在继续操作之前,您必须跳过错误的输入(即,通过使用next()
)。
假设您使用的是Scanner
类,则可以检查令牌是否具有int
if(scanner.hasNextInt()){
int input = scanner.nextInt();
if (lowerLimit > input && input < upperLimit) {
return input;
}
}
else
{
System.out.println("Incorrect input value, try again");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.