Java 如果在循环中首先出现不匹配,则扫描仪不查找输入

Java 如果在循环中首先出现不匹配,则扫描仪不查找输入,java,Java,下午,, 我对scanner类有一个奇怪的问题,这可能是我的错,也可能不是我的错。 我创建了一个类似于scanner的类,它为用户显示前缀和错误检查。 问题是,如果一个输入抛出一个InputMismatchError,那么代码在下一次尝试时会到达扫描行,并且从不要求输入。它只是抛出不匹配错误,并在不等待用户输入的情况下继续 public int readInt(String prefixString, int lowLimit, int highLimit) { int numb

下午,, 我对scanner类有一个奇怪的问题,这可能是我的错,也可能不是我的错。 我创建了一个类似于scanner的类,它为用户显示前缀和错误检查。 问题是,如果一个输入抛出一个InputMismatchError,那么代码在下一次尝试时会到达扫描行,并且从不要求输入。它只是抛出不匹配错误,并在不等待用户输入的情况下继续

    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
方法。异常很好,它允许我在消息不匹配时以不同方式设置消息。