(Java)无法捕获异常

时间:2013-10-23 16:56:27

标签: java exception exception-handling try-catch

我是Java的初学者,并试图捕获异常'InputMismatchException'。下面是我的代码,我希望它易于阅读,如果格式不正确,请提前道歉。它构建良好并执行,但如果我输入一个字符,例如'catch'不起作用,错误出现;

“线程中的异常”主“java.util.InputMismatchException”

我相信代码中的其他所有内容都可以正常运行,包括'try',除了System.out.print命令之外,我没有任何其他内容。

import java.util.*; // imports

public class w4q1

    {
        public static void main(String[] args)
        {
            Scanner user_input = new Scanner( System.in ); // declaring Scanner util
                System.out.print("Please enter an integer: \n"); // Asks for input
                int d = user_input.nextInt();

        while (d > 0 || d < 0) // start of while loop, in the event of anything other than zero entered
        {
            try {

                    if (d < 0) // if statements
                    {
                    System.out.print("The integer " + d + " is negative\n");
                    break;
                    }

                            else if (d > 0)
                            {
                            System.out.print("The integer " + d + " is positive\n");
                            break;
                            }

                                else 
                                {
                                System.out.print("You have not entered an integer\n");
                                break;
                                }

                }

                catch (InputMismatchException e) // Error message for letters/characters and decimals
                    {
                        System.out.print("You have entered an incorrect value, please restart the program\n");
                    }



        }

        if (d == 0)
            {
            System.out.print("A zero has been entered\n");
            }

        }
    }   

3 个答案:

答案 0 :(得分:1)

如果你仍然有一个InputMismatchException,即使你有一个try-catch块,那么异常必须来自try-catch块之外的某个地方。

查看try-catch块之外的其他内容可以抛出InputMismatchException并在该语句周围放置try-catch块,或者扩展现有的try-catch块以包含该语句。

答案 1 :(得分:0)

如果确实没有捕获到异常,那么生成的堆栈跟踪应该显示抛出异常的实际代码行。看一下代码,我猜这是异常发生的地方:

 user_input.nextInt();

我建议您查看堆栈跟踪,看看是否可以确认。

答案 2 :(得分:0)

在此代码周围放置一个try-catch块

  

int d = user_input.nextInt();

通过这样做,您还需要稍微更改当前代码以使其正常。祝你好运!