捕获异常时进入无限循环

时间:2014-04-28 15:28:58

标签: java exception

int option;
    while(true) {
        try {
            option = sc.nextInt();
        }
        catch(Exception e) {
            System.out.println(e);
            continue;
        }
        if(option != 1 && option !=2) {
            System.out.println("Please choose one of the above options!");
            continue;
        }
        break;
    }

那么为什么我输入一个字符串代码进入无限循环?

3 个答案:

答案 0 :(得分:0)

因为当你抓住时,你会调用continue并且循环直接进入下一次迭代。

编辑:愚蠢的我,您需要在致电hasNextInt()之前致电nextInt()。您可能会耗尽输入,因此会反复抛出相同的异常。

请注意,如果您使用输入流,hasNextInt()将会阻止。这将基本上模拟一个等待"等等的程序。用户输入。

答案 1 :(得分:0)

因为您不会在循环中间暂停以重新扫描下一个用户输入。

答案 2 :(得分:0)

我假设你试图让用户选择选项1或选项2:

您的代码说如果他们的选择不是1和2,那么继续。它应该说如果他们的选择不是1或2,那么继续,这将编码如下:

if(option != 1 && option != 2) {
    System.out.println("Please choose one of the options");
    continue;
}

顺便说一句,使用continue和break是不好的编码。相反,使用带有if条件的while循环。

修改

这是正确的while循环:

try {
    option = sc.nextInt();
    while(option != 1 && option != 2)
        System.out.println("Please choose one of the options");
} catch (Exception e) {
    e.printStackTrace();
}

编辑#2:

在捕获可能的异常后,您还尝试继续编码。如果要确保它运行,您应该将该代码放在finally {}块中,而不管异常。但是,在这种情况下不需要它。通常finally{}块用于I / O流。