2012-04-14 94 views
0

驅動程序類,inputoutput類和numberValidator類。用戶需要使用j-option窗格彈出框輸入數字1-8,如果輸入的不是1-8,應該顯示錯誤消息。如果數字是1-8,則代碼的其餘部分(此處不寫)應該繼續運行。我收到錯誤,有人看到我錯了?Java:驗證輸入是否爲特定數字

///Driver class (excludes package)//// 

public class Driver { 
    public static void main(String[] args) { 
     InputOutput inputoutput = new InputOutput(); 

     inputoutput.displayMenu(); 
    } 
} 

///InputOutput class (excludes package and import for JOptionPane)/// 
public class InputOutput { 
    public int displayMenu() 
    { 

     String stringChoice = JOptionPane.showInputDialog("Restaurant:\n" 
       + "1. Pancakes: $10.00\n" 
       + "2. Bananas: $1.00\n" 
       + "3. Bread: $2.00\n"); 
     if (numberValidator.isNumeric(stringChoice)){ 
      choiceNumber = Integer.parseInt(stringChoice); 
     } 
     return choiceNumber; 
    } 

///numberValidator class code (excludes package)/// 
public class numberValidator { 
    public boolean isNumeric(String str) 
    { 
     boolean valid = true; 
     String regex = "[1-8/.]*"; 
    valid = str.matches(regex); 
    return valid; 
} 
} 
+0

你得到什麼錯誤? – 2012-04-14 04:19:48

+0

非靜態方法isNumeric(java.lang.String)不能從靜態上下文中引用。 – user1332839 2012-04-14 04:54:28

回答

1

你得到的錯誤是什麼?無論用戶選擇什麼,它是否繼續運行?在下面的代碼中,我添加了一個else,如果所選值不是數字,它將重新運行displayMenu()方法。

public class InputOutput { 
    public int displayMenu() 
    { 

     String stringChoice = JOptionPane.showInputDialog("Restaurant:\n" 
       + "1. Pancakes: $10.00\n" 
       + "2. Bananas: $1.00\n" 
       + "3. Bread: $2.00\n"); 
     if (numberValidator.isNumeric(stringChoice)){ 
      choiceNumber = Integer.parseInt(stringChoice); 
     } 
     else { 
      return displayMenu(); 
      } 
     return choiceNumber; 
    } 

但對於你的問題,豈不是更好地使用的選項的下拉列表?...

String[] options = new String[]{"Pancakes: $10.00","Bananas: $1.00","Bread: $2.00"} 

int chosenIndex = JOptionPane.showOptionDialog(null, "Choose a menu item", "Menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); 

String chosenValue = options[chosenIndex]; 
+0

嗨,我的錯誤是非靜態方法isNumeric(java.land.String)不能從靜態上下文中引用。不幸的是,我需要使用JOptionPane運行我的代碼並獲取一個數字。我改變了正則表達式:String regex =「[1-8]」; 我仍然收到該錯誤:/ – user1332839 2012-04-14 04:50:55

+0

將方法isNumeric()更改爲'public static boolean isNumeric(String str)',然後重試。如果它解決了問題,請勾選您的問題已解決,並已選擇答案。 – wattostudios 2012-04-14 04:57:34

+0

謝謝你的幫助! – user1332839 2012-04-14 05:00:48

1

也許你的意思是:String regex = "[1-8]\." - 即在間隔1-8個位數後跟一個點?

1

你可以簡化你的正則表達式爲String regex = "[1-8]";

這意味着你的正則表達式只能接受數字從1到8

問候。

編輯:

對於您的錯誤:

你永遠不會初始化numberValidator所以compilator看到要存取權限的ISNUMERIC方法沒有的NumberValidator的實例,並看到medthod ISNUMERIC還沒有關鍵字static 。這就是爲什麼它會告訴你消息錯誤。

了變化你的if語句這樣正確你的問題:

if (new numberValidator().isNumeric(stringChoice)) 

或讓你的方法isNumeric()靜態的。

順便說一句:類名必須包含大寫的第一個字符。

+0

謝謝,我做了這個改變,但我仍然得到一個非靜態方法isNumerica(java.lang.String)不能從靜態上下文錯誤引用。謝謝 – user1332839 2012-04-14 04:51:47

+0

@ user1332839:我編輯了我的答案。 – 2012-04-14 05:00:57