我一直在尝试编写这段代码一段时间,我无法弄清楚我的嵌套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;
}
答案 0 :(得分:1)
您正在使用的类(Card
)没有适当重写的.equals()
方法,因此它使用Object
默认值 - 相等运算符(==
) - 检查两个对象是否相等。您使用new
对象为数组中的每个项填充数组,因此它们都不等于==
,因此它们都不是.equals()
。您需要覆盖其.equals()
方法以返回卡片在语义上是否相等(即相同的等级和套装)。在您使用它时,您也应该覆盖hashCode
,以维持一般合同(如果x.equals(y)
然后x.hashCode() == y.hashCode
)。