Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как мне правильно реализовать takeDamage, чтобы загорались все галочки? Пожалуйста помогите срочно решить проблему!!!!!!

Светлана Андрющенко Ученик (115), на голосовании 1 год назад
public void takeDamage(Integer damage) throws PersonDead, Exception {
this.health -= damage - protection;
if (health - (damage - protection) == 0 || health - (damage - protection) < 0){
throw new PersonDead("");
}
if (damage < 0){
throw new PersonDead("");
}

}

Integer facePunch() throws Exception, PersonDead {
takeDamage(1);
return health;
}

Что в итоге мне вывело.
Tests for Person
TEST CASE Person: Имеет 50 здоровья и 0 защиты ✅
TEST CASE Person: announce() содержит имя ✅
TEST CASE Person: announce() содержит здоровье ✅
TEST CASE Person: announce() содержит защиту ✅
TEST CASE Person: facePunch() наносит 1 урон ❌
TEST CASE Person: takeDamage() здоровье не опускается меньше нуля ❌
TEST CASE Person: Вызов PersonDead() ✅
Tests for Mage
TEST CASE Mage: наследуется от Person ✅
TEST CASE Mage: Имеет 100 здоровья и 15 защиты ❌
TEST CASE Mage: announce() содержит имя ✅
TEST CASE Mage: announce() содержит здоровье ✅
TEST CASE Mage: announce() содержит защиту ✅
Exception in thread "main" org.future.code.homework.HomeWork5$PersonDead:
at org.future.code.homework.HomeWork5$Person.takeDamage(HomeWork5.java:69)
at org.future.code.homework.HomeWork5$Mage.takeDamage(HomeWork5.java:112)
at org.future.code.homework.HomeWork5$Mage.fireBall(HomeWork5.java:116)
at org.future.code.homework.HomeWork5.main(HomeWork5.java:179)
Голосование за лучший ответ
ㅤ ㅤ Оракул (52274) 1 год назад
Для того, чтобы все галочки загорались, необходимо в методе takeDamage изменить условие, при котором герой умирает. Вместо сравнения if (health - (damage - protection) == 0 || health - (damage - protection) < 0) необходимо сравнивать if (health - (damage - protection) <= 0). Также, чтобы успешно пройти тесты, необходимо внести изменения в метод facePunch и передавать ему аргумент 1 вместо damage. Вот исправленный код:
 public void takeDamage(Integer damage) throws PersonDead, Exception { 
if (damage < 0){
throw new PersonDead("");
}
this.health -= damage - protection;
if (health <= 0){
throw new PersonDead("");
}
}

Integer facePunch() throws Exception, PersonDead {
takeDamage(1);
return health;
}
Также необходимо исправить значение здоровья и защиты у объекта Mage. Вот исправленный код класса Mage:
 class Mage extends Person { 
Mage(String name) {
super(name);
this.health = 100;
this.protection = 15;
}

void fireBall(Person person) throws PersonDead, Exception {
person.takeDamage(20);
}
}
После внесения этих изменений все тесты должны проходить успешно.
Светлана Андрющенко Ученик (115) 1 год назад
Спасибо, сильно выручил.
Максим Искусственный Интеллект (213341) 1 год назад
 this.health -= damage - protection;  
Если защита больше урона, то он у тебя лечиться будет? Круто.
Код написан чересчур запутанно и явно с ошибками. Тут делается просто.
 if (damage <= protection) return; 
 this.health = Math.max(this.health - (damage - protection), 0);  
 if (this.health <= 0) throw new PersonDead(""); 
Не понятно только, зачем выбрасывать исключение, если персонаж умер, но фиг с ним.
Похожие вопросы