【问题标题】:Using a nested for loop to find duplicates使用嵌套的 for 循环查找重复项
【发布时间】:2013-01-22 18:39:16
【问题描述】:

我一直在尝试编写这段代码,但我无法弄清楚我的嵌套 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;
}

【问题讨论】:

  • 对我来说似乎没问题。它到底是怎么不工作的? pack 是什么?
  • 您是否在列表中的任何内容上覆盖了.equals()
  • @RohitJain,pack 是它正在搜索的数组列表。它不像我测试它时那样工作,答案总是错误的。
  • @Kevin.. 这有什么关系?
  • 我打赌你不会覆盖Card中的等于

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


【解决方案1】:

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

【讨论】:

  • 将最后一行更改为:-You must also override hashCode method 以维护equalshashCode 之间的合同。
猜你喜欢
  • 2021-05-17
  • 2018-02-08
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多