I have a game app and I want it to update the constructor strength
value when I call the levelUp()
method.
public Hero(String heroname, double strength, double strength_gain){ this.heroname = heroname; this.hp = (int) (200+20*strength); this.strength_gain = strength_gain; } public void levelUp(){ this.strength = strength + strength_gain; }
But when i do System.out.println(hero.hp);
after calling levelUp()
it returns the first value.
Advertisement
Answer
One way to always get an up-to-date value for a calculation that depends on other variables/inputs is to calculate it on demand (useful for simple calculations, such as the one you have).
EDIT: I realized that you might want to have an hp
and a maxHp
if your hero can actually lose/gain hp
so I edited the example to take that into account.
public class Hero { // ... public int hp; public Hero(String heroname, double strength, double strength_gain){ this.heroname = heroname; this.strength = strength; // <-- don't forget to save the initial strength as well this.strength_gain = strength_gain; this.hp = getMaxHp(); } public int getMaxHp() { return (int) (200 + 20 * strength); } public void levelUp(){ strength = strength + strength_gain; // decide if leveling up also heals your hero? hp = getMaxHp(); } // ... }
Elsewhere in code you can access both the .hp
and the .getMaxHp()
.
System.out.println(hero.hp); System.out.println(hero.getMaxHp());
If the calculations would be heavy, then using a boolean
as a change flag and lazily recalculating only once per change and only when required would make more sense.