输入异常无效

时间:2013-10-04 20:26:01

标签: java

我有一个读取整数输入的菜单,这是菜单的方法:

public int menu(String _menuHeader,String[] _menuItems) throws InvalidInputException {
    int choice = 0;
    do {
        try {
            scanner.nextLine();
            System.out.println(_menuHeader);

            for (int i = 0; i < _menuItems.length; i++) {
                System.out.println(" " + (i + 1) + " " + _menuItems[i]);
            }

            choice = scanner.nextInt();

            if (choice <= 0 || choice > _menuItems.length) {
                throw new InvalidInputException();
            }
        } catch (Exception e) {
            System.out.println("Enter valid input");
            validInput = false;
        } catch (InvalidInputException e) {
            System.out.println("Please enter a choice between 1 and" + _menuItems.length);
            validInput = false;
        }
    } while (!validInput);
}

现在我想在输入超出允许选择范围时捕获异常,即输入7选择1和2,

为此,我尝试使用InvalidInputException,但是这给出了一个编译错误,因为“无法找到符号InvalidInoutException”,尽管我已导入'import.java.Throwable / Exception;'

3 个答案:

答案 0 :(得分:4)

InvalidInputException中没有java.lang这样的内容。您必须创建自己的自定义异常,并根据需要对其进行命名。

很抱歉这样说,但从您的代码判断,您对Java中异常处理的工作原理知之甚少。如果这是例外情况,那么请相应地重构代码。如果没有,请不要使用例外。在这段代码中你不需要它们。

答案 1 :(得分:2)

您是否为“InvalidInputException”定义了自定义异常类?如果没有,请通过这篇文章来创建自定义异常类。

How to define custom exception class in Java, the easiest way?

答案 2 :(得分:0)

我没有查找导入,但问题是你在InvalidInputException之前捕获了Exception。 Java使用第一个匹配的catch来处理异常,所以如果你在它的任何子类前面捕获一个超类,子类捕获将永远不会发生。

扭转你的捕获顺序,你会有更好的运气。

编辑:好的,我确实查了一下,Scanner.nextInt()无论如何都不会抛出异常。您可能想要java.util.InputMismatchException,但请自行检查:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28%29

PS:顺便说一句,这确实不是处理无效输入的最佳方法。 Scanner类有一个hasNextInt()方法来检测输入流中是否有下一个有效整数。作为一项规则,如果有一个明智的选择,通常最好避免抛出和捕获异常。 Scanner hasNext*方法专门为您提供合理的选择。