Мне нужна помощь в создании метода equals.
Метод: логическое значение equals(Zombie other)
В описании конкретно сказано: "Принимает другой объект Zombie в качестве аргумента и возвращает true, если у зомби такое же имя и такая же степень заражения, оружие(я) и мозги, как у другого зомби."
Я не понимаю, как бы я разделил зомби на отдельные части, чтобы сравнить их с переменными экземпляра, тогда как я бы сравнил все части.
Как создать метод Equals
Ответы (1)
Это будет правильная реализация equals() в вашем случае.
@Override
public boolean equals(Object obj) {
if (obj instanceof Zombie){
Zombie zombiObj= (Zombie) obj;
if(zombiObj.getName().equals(this.getName()) &&
zombiObj.getInfection().equals(this.getInfection())&&
zombiObj.getWeapon().equals(this.getWeapon()) &&
zombiObj.getBrain()== this.getBrain() ) {
return true;
}else{
return false;
}
} else{
return false;
}
}
person
Dark Knight
schedule
11.11.2013
@ JessNicole27, надеюсь, это решит твою проблему..
- person Dark Knight; 11.11.2013
Это было, но все для одной части, она хочет, чтобы мы сравнили мозги, и это целое число. jGrasp сказал, что я не могу уважать это, так как бы я это сделал?
- person JessNicole27; 11.11.2013
Обратитесь к обновленному сообщению, добавлено условие равенства мозгов для типа int.
- person Dark Knight; 11.11.2013
Это сработало, большое спасибо!
- person JessNicole27; 11.11.2013
Обратите внимание, что вам также необходимо переопределить hashCode, если вы переопределяете equals! (Два объекта, которые равны в соответствии с equals(), должны возвращать один и тот же хэш-код)
- person isnot2bad; 11.11.2013
@isnot2bad: здесь мы сравниваем объекты, используя их содержимое. Здесь HashMap/Map не используется. И, следовательно, реализация hashCode() здесь не является обязательной. Пожалуйста, поправьте меня, если я неправильно понял ваш комментарий.
- person Dark Knight; 11.11.2013
@DarkKnight не имеет значения. Отсутствие переопределения hashCode нарушает контракт java.lang.Object. Возможно, сейчас это не имеет никакого эффекта, но это все равно неправильно. Почти с уверенностью можно сказать, что когда-нибудь кто-нибудь поместит зомби в HashMap/-Set. Тогда, пожалуйста, не возвращайтесь сюда и не спрашивайте, почему это не работает/ведет себя странно... ;). См. также stackoverflow.com/questions/27581/
- person isnot2bad; 11.11.2013
@isnot2bad Поскольку текущее определение проблемы не включает ссылку на карту, не включает хэш-код (). Также, чтобы переопределить hashcode(), нам нужно иметь четкое представление о том, что все поля Zombie не изменятся и могут быть использованы здесь. Al жесткий я согласен с вашей точкой зрения. Спасибо
- person Dark Knight; 11.11.2013
@DarkKnight Вы правы, изменение полей проблематично. Но только если объект уже находится внутри HashMap/-Set. Контракт hashCode не запрещает использовать поля, которые могут изменяться. Просто не помещайте объекты в HashSet, а затем изменяйте их. Я предлагаю просто правильно переопределить hashCode (это не имеет большого значения и не наносит вреда).
- person isnot2bad; 11.11.2013
давайте продолжим это обсуждение в чате
- person isnot2bad; 11.11.2013
Если у другого зомби нет оружия (
zombiObj.getWeapon()
возвращает null, приводит к NullPointerException
- person cdalxndr; 26.02.2021