件实例是一个包含类Piece的List。 Piece对象包含两个类似于坐标int x和int y的实例变量。但是,当我尝试这些方法时,如果参数块已经在pieces对象中,则第二种方法不会返回true。我在类Piece上生成了一个相同的方法。不知道为什么第二种方法不起作用。
public boolean alreadyContainsCoordinate1(Piece piece) {
for (int i = 0; i < getLength(); i++) {
if (pieces.get(i).getX() == piece.getX() && pieces.get(i).getY() == piece.getY()) {
return true;
}
}
return false;
}
public boolean alreadyContainsThisCoordinate2(Piece piece) {
for (Piece body : pieces) {
if (body.equals(piece)) {
return true;
}
}
return false;
}
答案 0 :(得分:1)
您的第二个alreadyContainsThisCoordinate2()
方法可能使用对象的默认equals()
方法,该方法比较引用,而不是特定对象的内容。您可以尝试覆盖equals
,如下所示:
@Override
public boolean equals(Object o) {
if (!(o instanceof Piece)) {
return false;
}
Piece p = (Piece)o;
return this.getX() == p.getX() && this.getY() == p.getY();
}