Scanner b = new Scanner(System.in);
public void menu() {
while (true) {
try {
System.out.println("Your options is:");
int option = 0;
option = b.nextInt();
b.nextLine();
if (option == 1)
add();
else if (option == 2)
delete();
else if (option == 3)
print();
else if (option == 4)
nr();
else if (option == 0)
break;
} catch (Exception e) {
System.out.println("Not a valid option!");
// break;
}
}
b.close();
}
事情是,每当我提供除所选选项(0,1,2,3,4)之外的其他内容时,该函数都会打印 catch
中的消息,然后请求新选项但这件事却屡屡做。如果存在 break
,整个执行就会停止,我想要的只是再次请求一个选项,但没有无限循环。例如,如果我输入“r”而不是数字,它应该捕获异常并通过 while
再次获取。
我错过了什么?
最佳答案
try...catch
的基本目的是try
执行可能抛出异常的代码,如果它确实抛出异常异常,捕获
它并处理它。
在这种情况下,无效输入不会引发异常,除非他们设法将一个字符潜入其中,这将导致无限循环。
不要假设用户将输入数字(这是 Scanner#nextInt
通常假设的),而是读取整行,并使用 Integer.parseInt()
构造int
。
option = Integer.parseInt(b.nextLine());
如果由于有人决定输入“foo”而不是“1”而导致此问题发生,那么您将遇到特殊情况,并且能够再次重新输入值。
关于Java循环异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20042422/