如何将 private int 类型字段的值加倍?
How to double a value of private int type field?
这是 class Enemy
中方法 takeDamage
的代码,它是 class Vampire
的超class。
public void takeDamage(int damage) {
int remainingHitPoints = hitPoints - damage;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(name + " took " + damage + " damage and have " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
this.lives = this.lives - 1;
System.out.println(name + " took " + damage + " damage" + "\n------------------------------------" + "\n" + name +" lost a life" + "\n------------------------------------");
if (lives > 0) {
System.out.println(name + " revived" + "\n------------------------------------");
setHitPoints(remainingHitPoints + damage);
} else {
System.out.println(name + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
在class Vampire
中我覆盖了方法takeDamge
:
public void takeDamage(int damage) {
int inflictedDamage = damage/2;
int doubleHitPoints = getHitPoints()*2;
int remainingHitPoints = getHitPoints() - inflictedDamage;
int remainingLives = getLives() - 1;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage) and has " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
setLives(remainingLives);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage)" + "\n------------------------------------" + "\n" + getName() +" lost a life" + "\n------------------------------------");
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
setHitPoints(doubleHitPoints);
} else {
System.out.println(getName() + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
我打算做的是将对象的 hitPoints
加倍,它最初由构造函数设置。
当一个 Vampire
物体受到足够的伤害而死亡时(换句话说,当它失去生命时),这个方法成功地使物体的 hitPoints
.
当 Vampire
对象受到的伤害不足以导致死亡时,就会出现问题(如果我诊断正确的话)。
setHitPoints(remainingHitpoints);
被执行,当 Vampire
对象受到足够的伤害而死亡时,它会加倍对象的 remainingHitPoints
而不是原始的 hitPoints
.
我想解决这个问题。
hitPoints
字段已在 Enemy
class 中声明为私有,所以如果我理解得很好,修改此字段值的唯一方法是使用 getHitPoint
方法 (getter) 里面 Enemy
class.
您需要一些存储原始生命值的地方。
如果您的 Enemy
class 没有提供此信息,而您只需要在 Vampire
class 中提供,您可以更改 Vampire
class 沿着这些线:
public class Vampire extends Enemy {
private int originalHitPoints;
public Vampire() {
// ...
originalHitPoints = getHitPoints();
}
public void takeDamage(int damage) {
// ...
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
setHitPoints(originalHitPoints * 2);
}
// ...
}
}
如果您想在吸血鬼每次死亡时使生命值翻倍,您可以像这样更改 takeDamage()
的代码:
public void takeDamage(int damage) {
// ...
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
originalHitPointes *= 2; // double the hit points
setHitPoints(originalHitPoints);
}
// ...
}
这是 class Enemy
中方法 takeDamage
的代码,它是 class Vampire
的超class。
public void takeDamage(int damage) {
int remainingHitPoints = hitPoints - damage;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(name + " took " + damage + " damage and have " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
this.lives = this.lives - 1;
System.out.println(name + " took " + damage + " damage" + "\n------------------------------------" + "\n" + name +" lost a life" + "\n------------------------------------");
if (lives > 0) {
System.out.println(name + " revived" + "\n------------------------------------");
setHitPoints(remainingHitPoints + damage);
} else {
System.out.println(name + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
在class Vampire
中我覆盖了方法takeDamge
:
public void takeDamage(int damage) {
int inflictedDamage = damage/2;
int doubleHitPoints = getHitPoints()*2;
int remainingHitPoints = getHitPoints() - inflictedDamage;
int remainingLives = getLives() - 1;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage) and has " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
setLives(remainingLives);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage)" + "\n------------------------------------" + "\n" + getName() +" lost a life" + "\n------------------------------------");
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
setHitPoints(doubleHitPoints);
} else {
System.out.println(getName() + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
我打算做的是将对象的 hitPoints
加倍,它最初由构造函数设置。
当一个 Vampire
物体受到足够的伤害而死亡时(换句话说,当它失去生命时),这个方法成功地使物体的 hitPoints
.
当 Vampire
对象受到的伤害不足以导致死亡时,就会出现问题(如果我诊断正确的话)。
setHitPoints(remainingHitpoints);
被执行,当 Vampire
对象受到足够的伤害而死亡时,它会加倍对象的 remainingHitPoints
而不是原始的 hitPoints
.
我想解决这个问题。
hitPoints
字段已在 Enemy
class 中声明为私有,所以如果我理解得很好,修改此字段值的唯一方法是使用 getHitPoint
方法 (getter) 里面 Enemy
class.
您需要一些存储原始生命值的地方。
如果您的 Enemy
class 没有提供此信息,而您只需要在 Vampire
class 中提供,您可以更改 Vampire
class 沿着这些线:
public class Vampire extends Enemy {
private int originalHitPoints;
public Vampire() {
// ...
originalHitPoints = getHitPoints();
}
public void takeDamage(int damage) {
// ...
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
setHitPoints(originalHitPoints * 2);
}
// ...
}
}
如果您想在吸血鬼每次死亡时使生命值翻倍,您可以像这样更改 takeDamage()
的代码:
public void takeDamage(int damage) {
// ...
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
originalHitPointes *= 2; // double the hit points
setHitPoints(originalHitPoints);
}
// ...
}