Java 开关块尝试/捕获异常
我有一个Java 开关块尝试/捕获异常,java,switch-statement,Java,Switch Statement,我有一个switch语句,包含5个整数选项和一条默认消息。我正试图让它工作,这样,如果选择了除选择号码以外的任何内容,就会显示“无效输入”消息。它目前适用于数字,但如果输入了任何其他内容,则会出现以下异常: 线程“main”java.util.InputMismatchException中出现异常 我试图添加一个try/catch语句,但它似乎不起作用;我一直收到相同的错误消息 public static void main(String[] args) throws IOException {
switch
语句,包含5个整数选项和一条默认消息。我正试图让它工作,这样,如果选择了除选择号码以外的任何内容,就会显示“无效输入”消息。它目前适用于数字,但如果输入了任何其他内容,则会出现以下异常:
线程“main”java.util.InputMismatchException中出现异常
我试图添加一个try/catch语句,但它似乎不起作用;我一直收到相同的错误消息
public static void main(String[] args) throws IOException {
int menuItem = -1;
while (menuItem != 0) {
menuItem = menu();
try {
switch (menuItem) {
case 1:
showTaskList();
break;
case 2:
addTask();
break;
case 3:
sortList();
break;
case 4:
deleteTasks();
break;
case 0:
break;
default:
System.out.println("Invalid Input");
break;
}
}
catch (java.util.InputMismatchException err) {
System.out.println("\nINVALID INPUT!");
}
}
}
如果您的程序以
java.util.InputMismatchException
终止,那么该异常不会从您提供的try
块中引发。由于该异常与以意外形式输入输入相关,并且在进入try
块之前,显然已经在方法menu()
中执行了将输入转换为数字的尝试,因此推断异常是从方法menu()引发的似乎是合理的
。异常附带的堆栈跟踪会直接告诉您这一点,并且比您所展示的更精确
根据任务的性质和收到的异常类型,我推测您正在使用扫描仪
读取用户输入,特别是调用Scanner.nextInt()
。如果在下一个标记无法解释为Javaint
时调用,此方法将抛出指定类型的异常
只有您可以决定如何最好地处理该问题,但一种可能性是将菜单()的调用移动到try
块中:
// ...
while (menuItem != 0) {
try {
menuItem = menu();
switch (menuItem) {
// ...
请发一封信读一读。否则我们就无能为力了。我假设menuItem=menu()
是接收输入并抛出错误的关键,因此这是您需要尝试/捕获的方法。谢谢,这就是问题所在!现在变得更有意义了。