0

私が書いたこの「search()」関数の処理に問題があります。さて、オブジェクトがすでにスタックに存在するかどうかを確認する必要があります。私のオブジェクトは次のようになります。

 Boat [mLeft=[0, 0, 0], boat=L, mRight=[0, C, V]]

そして、私のスタックは次のようなものです。

  Boat [mLeft=[0, 0, 0], boat=L, mRight=[0, C, V]]
  Boat [mLeft=[0, 0, 0], boat=C, mRight=[L, 0, V]]
  Boat [mLeft=[0, 0, 0], boat=V, mRight=[L, C, 0]]
  Boat [mLeft=[0, 0, 0], boat=0, mRight=[L, C, V]]

そして、これは私の「検索」機能です。

  public boolean search(Boat b){
    boolean r=false;
    for(int i=0;i<btStack.size();i++)
    {
        if(btStack.elementAt(i).equals(b))
        {
            r = true;               
        }
    }
    return r;
}

これは決して真実ではありません...そして私は理由がわかりません。手伝ってもらえますか?

4

1 に答える 1

3

デフォルトのequalsオブジェクトクラスの動作は、参照に基づいてequalityを比較しますequals。Boatクラスでオーバーライドする必要があります。等しい場合は、オーバーライドする必要もありますhashcode

@Override
public boolean equals(Object obj) {
    if (obj == null)
        return false;
    if (!(obj instanceof Boat))
        return false;

    Boat b = (Boat)obj;
    return  b.someproperty==this.someproperty;//Assuming someproperty is primitive
}

参照:

  1. Equals and Hash Code
  2. Overriding equals and hashCode in Java
于 2012-10-27T16:08:25.080 に答える