0

私はしばらくこのコードを書こうとしてきましたが、ネストされた for ループの何が問題なのかわかりません。私のif文に問題があるのではないかと思いますが、よくわかりません。このコードは、10 枚のランダムなトランプを検索して、重複を見つけることになっています。コードの残りの部分が機能していることはわかっていますが、この部分で何が間違っていたのかわかりません。誰かが助けてくれたら、本当に感謝しています。(ジャワ)

    /*
 * 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デフォルトの等価演算子 ( ==) を使用して 2 つのオブジェクトが等しいかどうかをチェックしています。配列内の各項目のオブジェクトを配列newに入力しているため、 と等しいもの==はなく、したがって もありません.equals().equals()カードが意味的に等しい (つまり、ランクとスーツが同じ) かどうかを返すには、そのメソッドをオーバーライドする必要があります。hashCodeその間、一般的な契約を維持するためにオーバーライドする必要があります(if x.equals(y)then x.hashCode() == y.hashCode)。

于 2013-01-22T19:01:36.993 に答える