切换块try / catch异常

时间:2016-02-08 21:32:54

标签: java switch-statement

我有一个带有5个整数选项和默认消息的switch语句。我试图让它工作,以便如果选择除选择号之外的任何其他内容,将显示“无效输入”消息。它目前适用于数字,但如果输入任何其他内容,我会得到以下异常:

  

线程“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!");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果您的程序以java.util.InputMismatchException终止,则表示该异常未从您提供的try块中抛出。因为该异常与以意外形式输入输入相关联,并且因为在输入{之前}尝试将输入转换为数字已经在方法menu()中执行 {1}}阻止,似乎可以合理地断定从方法try抛出异常。伴随异常的堆栈跟踪会直接告诉您这一点,并且比您提供的内容更准确。

根据任务的性质和您收到的异常类型,我推测您使用menu()来读取用户输入,特别是您正在调用Scanner。如果无法将下一个标记解释为Java Scanner.nextInt(),则此方法将抛出您指定的类型的异常。

只有您可以决定最佳如何处理,但有一种可能性是在int块内调用menu()方法:

try