2014-06-13 100 views
0

我有一個方法用於驗證程序中的用戶輸入值。每當用戶輸入一個字符串到一個JOptionPane中時,我會調用這個方法並傳入輸入的字符串,加上我需要輸入的最大值和最小值。首先,我通過嘗試解析輸入字符串並捕獲異常來檢查輸入是否爲整數,然後檢查整數是否在最小值和最大值之間。我的問題是,如果用戶在提示後輸入另一個不正確的非整數值,我不知道如何檢查新值是否正確。這是方法,任何人都可以幫忙嗎?持續驗證整數

int checkInput(String input, int min, int max) { 
     Boolean isInteger = false; 
     Boolean inputAccepted = false; 
     int userInput = 0; //will be set later 
     while (!isInteger) { 
      try 
      { 
       userInput = Integer.parseInt(input); 
      } 
      catch (NumberFormatException e) 
      { 
       userInput = Integer.parseInt(JOptionPane.showInputDialog("Please enter only integers between " + min + " and "+ max + ".")); 
       isInteger = true; //the problem here is that it assumes the user inputted a correct value after being prompted... what if they enter another incorrect value? 
      } 
     } 
     while (!inputAccepted) { 
     if (userInput < min || userInput > max) 
     { 
       userInput = Integer.parseInt(JOptionPane.showInputDialog("Please enter only integers between " + min + " and "+ max + ".")); 
     } 
     else 
     { 
      inputAccepted = true; 
     } 
     } 
     return userInput; 
    } 
+0

也許你可以檢查用戶輸入的每個值後? – Lucas

+0

這就是我想要做的,但我不熟悉try和catch語句,所以我不確定如何在第一次進行循環檢查時如何做到這一點。 – user3738313

回答

2

我相信主要的問題是你有一個方法,其工作不簡單和定義明確。看起來好像你有一個聲明以外這個方法輸入一個數字;但checkInput有兩個工作:確保號碼是有效的,並輸入更多的號碼,直到它。這有兩個問題:輸入的代碼在兩個地方被複制,並且你有一個方法,其責任不明確。

而是嘗試編寫一個方法,檢查輸入是否有效,並返回truefalse。我會將名稱更改爲isValidInput。調用者然後將有一個循環來執行輸入,確保它是有效的,如果不是,則返回。

通常我不會通過指出設計中的缺陷來回答這個問題。但我認爲在這種情況下,如果你重新考慮你的設計,你的問題會自行回答。 (當你正確地設計事物時,情況往往是這樣的 - 事物就是這樣的。)

+0

感謝您的解釋,我試圖用一種方法做太多事情。非常明確和有用的答案! – user3738313

0

如果輸入不正確,你的checkInput()函數應該拋出它自己的異常。將代碼分成驗證器和解析器將導致解析輸入兩次。