You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中跨类访问并更新变量?——Monster类hp变量访问与修改问题求助

问题分析与解决方案

看起来你遇到的问题根源有两个,咱们一步步拆解解决:

1. 核心问题:Monster类缺少访问hp的公共方法

你的Monster类里的hp是private修饰的私有变量,按照Java的封装规则,外部类根本无法直接读写它,必须通过类提供的getter(获取值)和setter(修改值)方法才能操作。

先给你的Monster类补充这两个关键方法:

public class Monster{ 
    private String name, type; 
    private int hp, speed, attack, defense; 
    private Move move1, move2, move3, move4; 
    public Monster(String name, String type, int hp, int speed, int attack, int defense, Move move1, Move move2, Move move3, Move move4) { 
        this.name = name; 
        this.type = type; 
        this.hp = hp; 
        this.speed = speed; 
        this.attack = attack; 
        this.defense = defense; 
        this.move1 = move1; 
        this.move2 = move2; 
        this.move3 = move3; 
        this.move4 = move4; 
    }

    // 新增:获取当前HP的getter方法
    public int getHP() {
        return this.hp;
    }

    // 新增:修改HP的setter方法(可以额外加个逻辑防止HP变成负数)
    public void setHP(int newHP) {
        this.hp = Math.max(newHP, 0); // 确保HP不会低于0,符合游戏逻辑
    }
}

2. 修正调用代码的对象引用错误

你最后一行的hp.setHP(updatedHP);是完全错误的——这里的hp变量根本没有定义,你要修改的是pl.getMonster()返回的那个被攻击的怪物实例,所以要调整调用逻辑:

damage = getMonster().getAttack() + movePower - pl.getMonster().getDefense(); 
int currentHP = pl.getMonster().getHP(); // 注意:要获取被攻击方的当前HP
int updatedHP = currentHP - damage; 
pl.getMonster().setHP(updatedHP); // 对被攻击的怪物实例调用setHP方法

补充提醒:如果你的getMonster()是获取攻击方的怪物对象,那获取HP的时候一定要用pl.getMonster()(被攻击方),不然会错误地修改攻击方自己的HP,这点要对应你的游戏逻辑确认。

为什么之前的操作全无效?

  • private私有变量的封装规则限制了外部直接访问,必须通过类提供的公共方法操作;
  • 最后一行代码没有正确引用要修改的Monster实例,用了一个未定义的hp变量,自然无法生效。

内容的提问来源于stack exchange,提问作者ayy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:42:33