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;
}
那么为什么我输入一个字符串代码进入无限循环?
答案 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流。