Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 捕获输入不匹配异常不';I don’我不回信_Java_Exception_Try Catch - Fatal编程技术网

Java 捕获输入不匹配异常不';I don’我不回信

Java 捕获输入不匹配异常不';I don’我不回信,java,exception,try-catch,Java,Exception,Try Catch,所以我在做这个学校作业,基本上需要确保用户输入一个有效的选项(1、2或3) 我应该使用很多开关,但这是我制作的: private void choice() { try { Scanner s = new Scanner(System.in); int option = s.nextInt(); if (option == 1) { start(); } if (option == 2

所以我在做这个学校作业,基本上需要确保用户输入一个有效的选项(1、2或3)

我应该使用很多开关,但这是我制作的:

private void choice() {
    try {
        Scanner s = new Scanner(System.in);
        int option = s.nextInt();
        if (option == 1) {
            start();
        }
        if (option == 2) {
            info();
        }
        if (option == 3) {
            System.exit(0);
        }
        throw new InputMismatchException("Enter valid input");
    } catch (InputMismatchException e) {
        System.out.println(e.getMessage());
    }
}
如果您在控制台中输入一个数字,它将返回我的消息,如果您输入任何其他内容,它将返回“null”。为什么呢?因为如果我删除异常并查看stacktrace(例如,当输入字母时),它会显示InputMismatchException

提前谢谢

public void choice() throws InputMismatchException {
    Scanner s = new Scanner(System.in);
    int option = 0;

    try {
        option = s.nextInt();
    } catch (InputMismatchException e) {
        throw new InputMismatchException("Enter valid input");
    }

    if (option == 1) {
        System.out.println("e");
    } else if (option == 2) {
        System.out.println("f");
    } else if (option == 3) {
        System.exit(0);
    } else {
        throw new InputMismatchException("Enter valid input");
    }

}

public static void main(String[] args) {
    try {
        new Test().choice();
    } catch (InputMismatchException e) {
        System.out.println(e.getMessage());
    }
}

将int选项放在try中。完成。

请发布堆栈跟踪。确保引发另一个异常,而不是inputMismatch。查看堆栈跟踪。它是来自InputMismatchException吗?Catch(InputMismatchException e)下面的Catch Throwable(不要在生产代码中执行此操作)并只打印消息。它适用于数字,但如果我键入字母,则只会得到“null”。我以为我捕获了异常?问题是您的代码是option从未到达else语句。请参阅编辑。我编辑了问题,重新制作了选项拾取,现在应该可以到达了吗?scanner.nextInt()方法读取一个int。如果没有找到int,它将引发异常,并且永远不会到达if语句,因此您需要在输入期间处理异常,并将其传递给进行调用的方法。在本例中,main进行了调用,因此main处理异常并打印消息。