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
。
我错过了什么?
答案 0 :(得分:1)
try...catch
的基本目的是try
执行可能抛出异常的代码,如果 抛出异常,catch
它和处理它。
在这种情况下,无效输入不会抛出异常,除非他们设法在那里潜行一个字符,这会导致无限循环。
而不是假设用户将输入数字 - 这是Scanner#nextInt
通常假设的 - 而是读取整行,并使用Integer.parseInt()
构建int
。
option = Integer.parseInt(b.nextLine());
如果因为有人决定将“foo”改为“1”而爆炸,那么你将会遇到异常情况,并能够重新输入值。
答案 1 :(得分:0)
这样做
try
{
do
{
option=b.nextInt();
// continue
switch(option){
case 0:
break;
case 1: add();
break;
case 2: delete();
break;
case 3: print();
break;
case 4: nr();
break;
default: System.out.println("Not a valid option!");
break;
}
}while(!(option==1||option==2||option==3||option==4))
}
catch(Exception e){
System.out.println("Please enter a number");
}
答案 2 :(得分:0)
解决了它。我在catch中添加了b.nextLine();
并且循环停止。