【问题标题】:INvalid input exception无效输入异常
【发布时间】:2013-10-11 23:31:00
【问题描述】:

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

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);
}

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

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

【问题讨论】:

  • 为什么你认为这是正确的导入语句?
  • 不是吗?我只是在java docs上搜索它,也许我不知道如何阅读java docs,那我应该导入什么?
  • 您有文档链接吗?导入中的/ 非常规。
  • 您的代码中有错字:+_menuItems.lenght 应为 +_menuItems.length...

标签: java


【解决方案1】:

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

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

【讨论】:

  • 谢谢不知道我们必须定义我们的自定义类
【解决方案2】:

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

很抱歉,但从您的代码来看,您对 Java 中异常处理的工作原理知之甚少。如果这是异常做法,请相应地重构您的代码。如果没有,请不要使用异常。在这个 sn-p 代码中你不需要它们。

【讨论】:

    【解决方案3】:

    我没有查找导入,但问题是您在 InvalidInputException 之前捕获了异常。 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* 方法专门为您提供那些明智的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2020-06-06
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多