Java while循环无休止地捕获不匹配异常

时间:2015-04-28 22:37:02

标签: java loops exception while-loop try-catch

我正在尝试在java中创建一个简单的while循环,询问用户输入数字并将其存储在变量中。我也在检查以确保他们输入的值是一个数字。循环应该告诉用户如果他们输入了一个字符串,他们就没有输入数字。它还应该要求用户在告诉他们没有输入号码后再次输入号码。

目前,如果用户输入字符串,此代码会无休止地捕获异常。如何让这个循环起作用?

Scanner reader = new Scanner(System.in);
isInt = false;  
while(!isInt){
    try{
        System.out.println("Enter a number");                    
        int aNumber = reader.nextInt();
        isInt = true;
    }
    catch(InputMismatchException e){
        System.out.println("You didn't enter a number");
    }    
}

1 个答案:

答案 0 :(得分:3)

nextInt()方法不消耗非数字输入。此方法的Javadoc引用了重载方法nextInt(int),其中指出:

  

将输入的下一个标记扫描为int。如果下一个标记无法转换为有效的int值,则此方法将抛出InputMismatchException,如下所述。 如果翻译成功,扫描仪将超过匹配的输入。

(强调我的)

catch块中,添加一行调用reader.next()来使用(并忽略)非数字输入,以便在{{{{}的下一次迭代中检查下一个标记。 1}}循环。