Java:检测Array中的重复项

时间:2017-06-04 18:47:48

标签: java

我必须编写一个程序,输入各种棋子,将它们添加到一个数组中,然后找到可能的重复...

2 个答案:

答案 0 :(得分:0)

第一个问题:

当您添加第一个棋子时,i为0,对吧?在内部for循环中,k也从1开始,对吧?显然,chessboard[k]chessboard[i]是相同的,因为ki是相等的!

要解决此问题,只需添加i != k条件:

  for (int k=0; k<chessboard.length ; k++){
         // note the condition here
         if (k != i && chessboard[k] == (chessboard[i]) && chessboard[k] == null){
                 JOptionPane.showMessageDialog(null, "Error! There is a duplicate piece on the chessboard: "+chessboard[k]);
                 System.exit(0);
             }
          }
  break;
  }

第二个问题:

==比较两个操作数是否是相同的对象。即使两个棋子对象具有相同的颜色,类型和位置,它们仍然可以是两个独立的对象。你真正需要的是一种逻辑比较棋子对象的方法(当两个棋子的位置相等时,它们是相等的。)

为此,只需向equals添加Piece方法即可。这是一个简单的实现:

@Override
public boolean equals(Object obj) {
    if (obj instance of Piece) {
        Piece other = (Piece)obj;
        return other.position.equals(this.position);
    } else {
        return false;
    }
}

然后,您可以调用此方法,而不是使用==

第三个问题:

这不是一个真正的问题,但我建议您将数组的类型更改为Piece[]而不是Object[],除非您想在其中存储棋子以外的其他内容。

答案 1 :(得分:-1)

等于运算符==比较引用而不是实际内容。 你想要的是覆盖equals()方法并比较它自己的每个变量。不要忘记这对于字符串也是如此,因为String是引用类型。您可以比较字符串:

str1 = "first string";
str2 = "second string";
if(str1.equals(str2)){
statements;
}