Метод Java равно не работает как задумано - PullRequest
0 голосов
/ 13 июня 2018

штук экземпляр представляет собой список, который содержит класс Piece.Объект Piece содержит две переменные экземпляра, которые напоминают координаты int x и int y.Однако, когда я попробовал эти методы, второй метод не возвращает true, если параметр piece уже находится внутри объекта частей.Я сгенерировал равный метод для класса 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; 
    }

1 Ответ

0 голосов
/ 13 июня 2018

Ваш второй метод 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();
}
...