如何将 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);
        }

        // ...
    }