0

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

    /*
 * 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;
}
4

1 回答 1

1

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

于 2013-01-22T19:01:36.993 回答