2013-10-04 41 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中異常處理的工作方式知之甚少。如果這是異常實踐,則相應地重構您的代碼。否則,請不要使用例外。在這段代碼中你不需要它們。