Java 如果在循环中首先出现不匹配,则扫描仪不查找输入
下午,, 我对scanner类有一个奇怪的问题,这可能是我的错,也可能不是我的错。 我创建了一个类似于scanner的类,它为用户显示前缀和错误检查。 问题是,如果一个输入抛出一个InputMismatchError,那么代码在下一次尝试时会到达扫描行,并且从不要求输入。它只是抛出不匹配错误,并在不等待用户输入的情况下继续Java 如果在循环中首先出现不匹配,则扫描仪不查找输入,java,Java,下午,, 我对scanner类有一个奇怪的问题,这可能是我的错,也可能不是我的错。 我创建了一个类似于scanner的类,它为用户显示前缀和错误检查。 问题是,如果一个输入抛出一个InputMismatchError,那么代码在下一次尝试时会到达扫描行,并且从不要求输入。它只是抛出不匹配错误,并在不等待用户输入的情况下继续 public int readInt(String prefixString, int lowLimit, int highLimit) { int numb
public int readInt(String prefixString, int lowLimit, int highLimit)
{
int number = 0;
boolean validResponse=true;
System.out.print(prefixString + ": ");
do
{
try
{
number = scanner.nextInt();//this is what is causing the issue
if(number<lowLimit || number>highLimit)
{
System.out.print(number + " is outside of the limits of " + lowLimit + "-" + highLimit + "\nPlease retry: ");
validResponse=false;
}
else
{
validResponse=true;
}
}
catch(InputMismatchException e)
{
System.out.print("The phrase entered is not a valid number." + "\n" + prefixString + ": ");
validResponse = false;
}
} while (!validResponse);
return number;
}
public int readInt(字符串前缀字符串、int lowLimit、int highLimit)
{
整数=0;
布尔有效响应=真;
System.out.print(前缀字符串+“:”);
做
{
尝试
{
number=scanner.nextInt();//这就是导致问题的原因
如果(数字上限)
{
系统输出打印(数字+”超出“+下限+”-“+上限+”\n请重试:”);
有效响应=假;
}
其他的
{
有效响应=真;
}
}
捕获(输入不匹配异常e)
{
System.out.print(“输入的短语不是有效数字。”+“\n”+前缀字符串+”:”;
有效响应=假;
}
}而(!validResponse);
返回号码;
}
有人知道为什么会这样吗?谢谢
编辑遗留问题和其他具有相同问题的问题:
下面的解决方案仅部分解决了问题。这种情况仍在发生,但频率较低。我切换到BufferedReader类,它没有这个问题。当输入的前面不是数字时,可以跳过一个令牌:
catch(InputMismatchException e)
{
System.out.print("The phrase entered is not a valid number." + "\n" + prefixString + ": ");
validResponse = false;
scanner.next();
}
标记是两个分隔符之间的东西,默认为空白。查看Scanner类的文档了解详细信息以及如何更改它(
useDelimiter
)。我会试试看,我对Scanner的行为不太熟悉,因为我使用了一个类似的类很长时间,但我决定创建自己的类,因为它会在不匹配时崩溃。这似乎已经修复了它。非常感谢。很高兴这有帮助。作为补充说明,如果您不喜欢异常,也可以在调用nextInt
之前使用hasNextInt
方法。异常很好,它允许我在消息不匹配时以不同方式设置消息。