2013-10-04 44 views
1

我有输入读取整数菜单,这里是菜单的方法:无效的输入例外

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;'

+1

你为什么认为这是正确的进口声明? – pamphlet

+0

不是吗?我只是在java文档上搜索它,也许我不知道如何阅读java文档,我应该怎样导入呢? – Snedden27

+0

你有链接到文档?导入中的'/'非常不合常规。 – pamphlet

回答

0

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

颠倒你的捕获顺序,你会有更好的运气。

编辑:好的,我确实查了它,Scanner.nextInt()不会抛出这个异常。你可能想java.util.InputMismatchException,而是自行核实:

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

PS:这个真没有来处理输入无效,顺便的最佳途径。 Scanner类有一个hasNextInt()方法来检测输入流中是否有下一个有效整数。通常,如果有明智的选择,避免抛出和捕获异常通常会更好。 ScannerhasNext*方法是专门设计给你的那些明智的选择。

4

java.lang中没有InvalidInputException这样的东西。你将不得不创建你自己的自定义异常,并按你的意愿命名。

很抱歉地说这个,但从你的代码判断你对Java中异常处理的工作方式知之甚少。如果这是异常实践,则相应地重构您的代码。否则,请不要使用例外。在这段代码中你不需要它们。