Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 开关块尝试/捕获异常_Java_Switch Statement - Fatal编程技术网

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()
。如果在下一个标记无法解释为Java
int
时调用,此方法将抛出指定类型的异常

只有您可以决定如何最好地处理该问题,但一种可能性是将
菜单()的调用移动到
try
块中:

    // ...
    while (menuItem != 0) {
        try {
            menuItem = menu();
            switch (menuItem) {
            // ...

请发一封信读一读。否则我们就无能为力了。我假设
menuItem=menu()
是接收输入并抛出错误的关键,因此这是您需要尝试/捕获的方法。谢谢,这就是问题所在!现在变得更有意义了。