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();
}