2010-03-31 39 views
3
String [] A = {"High","Medium","Low"}; 
String [] B = {"High","Medium","Low"}; 
String [] C = {"High","Medium","Low"}; 
String [] D = {"High","Medium","Low"}; 
String [] E = {"High","Medium","Low"}; 
String [] F = {"High","Medium","Low"}; 

JComboBox Ai = new JComboBox(A); JComboBox Bi = new JComboBox(B); 
JComboBox Ci = new JComboBox(C); JComboBox Di = new JComboBox(C); 
JComboBox Ei = new JComboBox(E); JComboBox Fi = new JComboBox(F); 

.... 

//add the user choice in arrayList 
ArrayList<String> a = new ArrayList<String>(); 
a.add((String) Ai.getSelectedItem()); 
a.add((String) Bi.getSelectedItem()); 
a.add((String) Ci.getSelectedItem()); 
a.add((String) Di.getSelectedItem()); 
a.add((String) Ei.getSelectedItem()); 
a.add((String) Fi.getSelectedItem()); 

EDITED的可能的組合:
場景: 有選擇的6組(艾,鉍,次,狄,EI,網絡連接)。在每個組中,有3個子選擇(高(H),中(M),低(L)),用戶需要選擇一個在每個6組如何檢查和匹配數組列表元素

的選擇可以是例如「HHHLLL」或「MMMLLM」或「HHLLMM」等。

什麼是最好的方式來檢查和匹配用戶的選擇,而不寫很多else if? 例如

if(Ai=="High" && Bi=="High" && Ci=="Low" && Di=="High" && Ei=="Low" && Fi=="Medium") { 
    System.out.println("Good Choice"); 
} 

謝謝。

+2

除非我失去了一些有3^6不是6的東西!排列。 – cletus 2010-03-31 00:06:01

+0

這沒有任何意義。如果你有6個組合框,每個組合框有3個選擇,那麼你的組合數是3^6,而不是6 !.您確定一組給定的輸入是否有效的準則是什麼? – Jherico 2010-03-31 00:07:15

+0

@Cletus:該死的,給一個人機會型 – Jherico 2010-03-31 00:07:52

回答

2

首先,你不需要給的選擇,JComboBox的每一個新的列表。

String[] choices = {"High", "Medium", "Low"}; 

JComboBox ai = new JComboBox(choices); 
JComboBox bi = new JComboBox(choices); 
JComboBox ci = new JComboBox(choices); 
JComboBox di = new JComboBox(choices); 
JComboBox ei = new JComboBox(choices); 
JComboBox fi = new JComboBox(choices); 

(在Java中的變量通常以小寫字母開頭,所以我改變了變量名稱爲小寫)。


接下來,你可以把所有六個JComboBoxes在數組中。你會明白爲什麼這是有用的。現在

JComboBox[] boxes = {ai, bi, ci, di, ei, fi}; 

,你可以讓你的用戶選擇的字符串是這樣的:

// Create an ArrayList of Strings, where each string is either "H", "M", or "L" 
ArrayList<String> userChoice = new ArrayList<String>() 

for (JComboBox box : boxes) { 
    // Go through this code once for each JComboBox in boxes 
    // The first time through, "box" means the first JComboBox 
    // The second time through, "box" is the second JComboBox, etc. 
    if (box.getValue().equals("High")) { 
     userChoice.add("H"); 
    } else if (box.getValue().equals("Medium")) { 
     userChoice.add("M"); 
    } else if (box.getValue().equals("Low")) { 
     userChoice.add("L") 
    } 
} 

那for-each循環可能不熟悉。它的意思是「經過這一次代碼爲陣列出頭的每個東西」。


如果您使用此代碼,你會擁有一個ArrayList名爲userChoice有類似[ 「H」, 「H」, 「M」, 「M」, 「L」,「L 「。

+0

謝謝。是什麼與「追加」和「添加」? – Jessy 2010-03-31 02:30:20

+0

附加是ArrayList中,追加上的JComboBox不同。兩個完全不同的類。這不是很明顯嗎?:)他們都添加東西到他們各自的數據列表的末尾(雖然加來自集合基類型,因此在不同類型的集合中工作方式不同,因爲它的實現方式不同 - 即Set) – 2010-03-31 19:22:14

+0

感謝評論,Jessy--這是我的錯誤。 ArrayList有一個「add」方法;它沒有「追加」方法。我編輯了答案,以便它能正常工作。 – Wesley 2010-03-31 19:29:33

0

分配整數每個選擇和計算使用了一些選擇的評價函數。

例如:Ai * 3^0 + Bi * 3^1 + ... + Fi * 3^5

然後,你將不得不選擇用戶映射到特定的整數區間,並可能用它做什麼容易。

但是,你有什麼真正想用它做什麼?

+0

我的數學是如此之弱:-( – Jessy 2010-03-31 00:21:37

+0

更容易在規範順序所有答案只是追加到一個字符串。這樣沒有可能INT溢出,如果問題的數量增長到了幾十個。 – tucuxi 2010-03-31 00:31:25

0

首先,你應該使用enum代表3種選擇。 ==(你在字符串上使用)在枚舉常量上是安全的,因爲它們保證是單例。一個enum常數可以很容易地轉換爲字符串(toStringvalueOf)。

所以現在你有6個變量,每個可以有3個值之一,所以有3^6種可能的情況。處理它們的最好方法是什麼?

在最一般的情況下,您必須準備好獨立處理所有3^6值。也就是說,我假設你沒有進行分組處理,例如「只要有更多的高點低於X點就行」。

我建議使用Map映射的設定組合來操作對象。

enum Setting { 
    High, Medium, Low; 
} 

class SettingCombination { 
    List<Setting> combo = ...; 
    // should be immutable, with proper equals and hashCode @Override 
    // should also have named getters for each of the 6 settings 
} 

interface SettingCombinationHandler { 
    void handle(SettingCombination settings);  
} 

class SettingCombinationHandlingService { 
    Map<SettingCombination, SettingCombinationHandler> handlers = ...; 
    // perhaps provide a default handler as well 
} 

這個想法是,對於每個有效的組合,你映射一個特定的處理程序。映射不必是一個對一個 - 幾個組合可以被映射到相同的處理,如果這適合您的需求(實際組合作爲參數傳遞給handle所以如果需要它可以區分它們)。

現在,請注意,我還沒有解決,你將如何顯示在JComboBox或者您可以使用其他任何這些設置選項。這是故意的。您應該將您的業務邏輯與用戶界面分開;您的視圖模型中的數據模型。

相關問題