游戏应用调用levelUp()更新strength后HP未更新的技术问题
问题分析与解决方案
你的代码存在两个关键问题,导致调用levelUp()后HP值始终为初始值:
- 构造器未初始化
strength成员变量:构造器参数接收了strength,但未将其赋值给this.strength,导致strength默认值为0,levelUp()的更新操作根本没作用在正确的初始属性上。 - HP值仅在初始化时计算一次:
hp在构造器中根据初始strength计算后,后续strength更新时没有同步刷新hp,所以输出始终是初始值。
修复步骤
步骤1:补全构造器的strength赋值
必须在构造器中把参数strength赋值给成员变量,否则levelUp()无法正确更新属性:
public Hero(String heroname, double strength, double strength_gain){ this.heroname = heroname; this.strength = strength; // 新增这行,初始化strength成员变量 this.hp = (int) (200 + 20 * strength); this.strength_gain = strength_gain; }
步骤2:同步更新HP值
有两种常见方案实现levelUp()时更新HP:
方案一:在levelUp()中直接更新HP
每次升级后重新计算HP值:
public void levelUp(){ this.strength += strength_gain; // 简化写法,等价于this.strength = this.strength + strength_gain this.hp = (int) (200 + 20 * this.strength); // 根据更新后的strength重新计算HP }
方案二:用动态getter方法获取HP
如果HP值始终由strength决定,可以去掉hp成员变量,改用getter方法实时计算,避免手动同步的麻烦:
// 移除类中的hp成员变量(如果之前定义了) public int getHp() { return (int) (200 + 20 * this.strength); } // 调用时使用: System.out.println(hero.getHp());
修改完成后,调用levelUp()再输出HP就能得到更新后的值了。
内容的提问来源于stack exchange,提问作者Hydro
相关产品推荐
相关产品推荐

