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组(Ai,Bi,Ci,Di,Ei,Fi)可供选择。在每组中,有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");
}
谢谢。
答案 0 :(得分: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中的变量通常以小写字母开头,因此我将变量名称更改为小写。)
接下来,您可以将所有六个JComboBox放入一个数组中。你会明白为什么这一点有用。
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循环。这意味着“在某些事物的数组中为每个某事执行此代码一次。”
如果您使用此代码,您最终会得到一个名为userChoice的ArrayList,其类似于[“H”,“H”,“M”,“M”,“L”,“L”]。< / p>
答案 1 :(得分:0)
为每个选项分配整数并计算使用选择的一些评估函数。
例如:Ai * 3^0 + Bi * 3^1 + ... + Fi * 3^5
然后,您可以将用户选择映射到某个整数间隔,并且可以更轻松地执行某些操作。
但是,你真的想用它做什么?
答案 2 :(得分:0)
首先,您应该使用enum
来表示3个选项。 ==
(你在字符串上使用的)在枚举常量上是安全的,因为它们保证是单例。可以轻松地将enum
常量转换为字符串(toString
和valueOf
)。
所以现在你有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
或您正在使用的其他任何内容中显示这些设置选项。这是故意的。您应该将业务逻辑与UI分开;您的视图模型中的数据模型。