Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捕获异常时进入无限循环_Java_Exception - Fatal编程技术网

Java 捕获异常时进入无限循环

Java 捕获异常时进入无限循环,java,exception,Java,Exception,那么,如果我输入一个字符串,为什么代码会进入一个无限循环呢?因为当你捕获时,你调用continue,循环会直接进入下一个迭代 编辑:愚蠢的我,在调用nextInt()之前,您需要调用hasNextInt()。您可能耗尽了输入,因此会一次又一次地抛出相同的异常 请注意,hasNextInt()将在使用输入流时阻塞。这将基本上模拟一个“等待”用户输入的程序。 ,因为你不会在循环中间暂停,重新扫描下一个用户输入。 < P>我假设你正在尝试让用户选择选项1或选项2: 你的代码说如果他们的选择不是1和2,

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

因为当你捕获时,你调用
continue
,循环会直接进入下一个迭代

编辑:愚蠢的我,在调用
nextInt()
之前,您需要调用
hasNextInt()
。您可能耗尽了输入,因此会一次又一次地抛出相同的异常


请注意,
hasNextInt()
将在使用输入流时阻塞。这将基本上模拟一个“等待”用户输入的程序。

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

< P>我假设你正在尝试让用户选择选项1或选项2:

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

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;
    }
顺便说一下,使用continue和break是不好的编码。相反,使用带有if条件的while循环

编辑:

以下是正确的
while
循环:

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


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

OK,,在下一次迭代中,代码应该再次要求我输入,但它没有,它会自动跳转到“catch”块,并反复打印错误消息!!你是对的,我希望用户选择1或2,但是“或”不正确,因为如果它是| |并且例如option=1,那么(option!=2)=>true,代码进入“if”块if option==1,那么条件永远不会达到(option==2)。但是,如果option==2,它首先检查并找到(option!=1),然后检查并找到(option==2)(如| |所述)。这使用户能够只输入1或2,或者通过while循环重复输入。因此,| |是正确的,而不是&&EDIT:仔细考虑后,您是正确的:它应该是&&;而不是&&EDIT。我道歉。
try {
    option = sc.nextInt();
    while(option != 1 && option != 2)
        System.out.println("Please choose one of the options");
} catch (Exception e) {
    e.printStackTrace();
}