使用嵌套for循环查找重复项

时间:2013-01-22 18:39:17

标签: java if-statement for-loop arraylist duplicates

我一直在尝试编写这段代码一段时间,我无法弄清楚我的嵌套for循环有什么问题。我认为这可能是我的if语句的问题,但我不确定。该代码应该搜索十个随机扑克牌以找到任何重复。我知道其余代码正在运行,但我无法弄清楚我对这部分做错了什么。如果有人可以提供帮助,我将非常感激。 (Java)的

    /*
 * Return true if there is a duplicate card in the pack
 */
public boolean hasDuplicate() {
    for (int i = 0; i < pack.size(); i++){
        for (int j = i; j < pack.size(); j++) {
            if (i != j && pack.get(i).equals(pack.get(j))){
                pos = i;
                return true;
            } 
        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:1)

您正在使用的类(Card)没有适当重写的.equals()方法,因此它使用Object默认值 - 相等运算符(==) - 检查两个对象是否相等。您使用new对象为数组中的每个项填充数组,因此它们都不等于==,因此它们都不是.equals()。您需要覆盖其.equals()方法以返回卡片在语义上是否相等(即相同的等级和套装)。在您使用它时,您也应该覆盖hashCode,以维持一般合同(如果x.equals(y)然后x.hashCode() == y.hashCode)。