比较Java中的变量

时间:2012-03-26 13:25:37

标签: java

我需要一种简单的方法来比较以下内容:

co1 = getvalue(c1) ; 
co2 = getvalue(c2) ; 
co3 = getvalue(c3) ; 
co4 = getvalue(c4) ; 
co5 = getvalue(c5) ; 
co6 = getvalue(c6) ; 

变量co1,co2,c3等从组合框中填充的值。我不希望用户两次选择相同的项目。我需要验证这些。只要值不相等,就继续执行程序..

6 个答案:

答案 0 :(得分:5)

无论co1,...,co6有哪种类型,我都假设它正确实现了equalshashCode

一种方法是使用Collections API,如下所示:

List<COType> coList = Arrays.asList(co1, co2, co3, co4, co5, co6);
if (new HashSet<COType>(coList).size() == coList.size()) {
    // no two elements are equal.
}

如果您认为这不是非常易读,您可以像这样手动完成:

boolean areAnyTwoEqual(COType... co) {
    for (int i = 0; i < co.length-1; i++)
        for (int j = i+1; j < co.length; j++)
            if (co[i].equals(co[j]))
                return true;
    return false;
}

并使用

调用该函数
if (!areAnyTwoEqual(co1, co2, co3, co4, co5, co6)) {
    // no two elements are equal
}

答案 1 :(得分:2)

将它们全部添加到Set,其中不能包含重复的条目。然后,如果Set.size()返回6,您就知道所有值都是不同的。

示例:

Set s = new HashSet();
s.add(c1);
...
s.add(c6);

if (s.size() == 6)
    // proceed
else
    // fail

答案 2 :(得分:2)

HashSet<?> set = new HashSet<?>();
for (? co : new ?[]{co1, co2, ...}){
      if (!set.add(co)){
          // duplicate element
      }
}
如果无法添加元素,则

Set.add将返回false,因为它已存在于集合中。用它来确定重复的元素。

答案 3 :(得分:1)

最简单的方法是将它们存储在一个数组中并迭代地比较它们

boolean allDifferent = true;
Object[] values = {getValue(c1), getValue(c2), ...};

for (int i = 0; i < values.length - 1; ++i)
  for (int j = i+1; j < values.length; ++j)
    if (values[i].equals(values[j])
      allDifferent = false;

但我个人使用Set(如果它浪费了分配),或者在选择一个项目时从组合框中删除该项目(例如,如果您选择{{ 1}}从cb2然后你从其他人中删除该项目。)

答案 4 :(得分:1)

假设我们可以迭代c1..c6,这样就可以了:

Set<Type> temp = new HashSet<Type>();
for(Combobox box:boxes) {
  if (!temp.add(getValue(box)) {
    // duplicate entry - omit error message
    break;
  }
}

答案 5 :(得分:0)

如果这些值来自JComboBox,为什么不从ComboBox2中删除ComboBox 1的选定项目以及从ComboBox1中删除ComboBox2的选定项目?