Java 无效输入异常

Java 无效输入异常,java,Java,我有一个菜单,可以读取整数进行输入,下面是菜单的方法: public int menu(String _menuHeader,String[] _menuItems) throws InvalidInputException { int choice = 0; do { try { scanner.nextLine(); System.out.println(_menuHeader); fo

我有一个菜单,可以读取整数进行输入,下面是菜单的方法:

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);
}
public int菜单(String _menuHeader,String[]_menuItems)引发InvalidInputException{
int-choice=0;
做{
试一试{
scanner.nextLine();
系统输出打印LN(_menuHeader);
对于(int i=0;i<\u menuItems.length;i++){
System.out.println(“+(i+1)+”“+”菜单项[i]);
}
选项=scanner.nextInt();
如果(选项菜单项长度){
抛出新的InvalidInputException();
}
}捕获(例外e){
System.out.println(“输入有效输入”);
validInput=假;
}捕获(无效){
System.out.println(“请在1和“+\u menuItems.length”之间输入一个选项);
validInput=假;
}
}而(!validInput);
}
现在我想捕捉一个异常,当输入超出允许的选项范围时,即输入7表示选项1和2


为此,我尝试使用InvalidInputException,但这会产生一个编译错误,即“找不到符号InvalidOutException”,尽管我已导入“import.java.Throwable/Exception;”

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


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

把你的捕获顺序颠倒过来,你会有更好的运气

编辑:好的,我确实查过了,Scanner.nextInt()不会抛出那个异常。您可能需要
java.util.InputMismatchException
,但请自己检查:


顺便说一句,这并不是处理无效输入的最佳方法。
Scanner
类有一个
hasNextInt()
方法来检测输入流中是否有下一个有效整数。通常,如果有合理的替代方案,最好避免抛出和捕获异常。
Scanner
hasNext*
方法是专门为您提供这些合理的选择而设计的。

java.lang
中没有
InvalidInputException
这样的东西。您必须创建自己的自定义异常,并根据需要命名它


很抱歉这么说,但是从您的代码来看,您对异常处理在Java中的工作方式知之甚少。如果这是异常实践,那么相应地重构代码。如果不是,则根本不要使用异常。在这段代码中不需要它们。

为什么您认为这是正确的导入语句?不是吗?我只是在java文档上搜索,也许我不知道如何阅读java文档,那么我应该导入什么?你有文档的链接吗?导入中的
/
非常非常规。您的代码中有一个输入错误:
+\u menuItems.length
应为
+\u menuItems.length
…感谢您不知道我们必须定义自定义类