繁体   English   中英

如何从另一个 java class 访问和更新变量?

[英]How do I access and update a variable form another java class?

我正在尝试访问我在“怪物”class 中初始化的变量“hp”,但没有任何效果。 我尝试使用 setter,但没有用。

Monster class:

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;
    }

以下代码是另一个 class 的一部分,我在其中尝试访问hp并更新其值:

    damage = getMonster().getAttack() + movePower - pl.getMonster().getDefense();
    int currentHP = getMonster().getHP();
    int updatedHP = currentHP - damage;
    hp.setHP(updatedHP);

这就是我试图访问和修改它的方式。 请帮忙。

您将无法在Monster class 之外更新该实例变量hp 。您使用.setHP()的想法不起作用,因为您没有在Monster object 上使用该方法。如果此示例中的Monster被称为p1 ,你应该这样做:

int updatedHP = p1.getHP() - damage;
p1.setHP(updatedHP);

假设您想保留updatedHP变量,并且在Monster class 中有一个有效的 getHP() 方法,即。

您的代码不清楚,因为有一堆变量没有包含类型(hp 和 p1),但我相信您正在尝试做的是这个 -

    damage = getMonster().getAttack() + movePower - pl.getMonster().getDefense();
    int currentHP = getMonster().getHP();
    int updatedHP = currentHP - damage;
    getMonster().setHP(updatedHP);

您需要在 Monster class 中定义 setter 并在实例化 Monster object 后使用它。(为简单起见删除移动)

public class Monster {

    private String name, type;
    private int hp, speed, attack, defense;

    public Monster(String name, String type, int hp, int speed, int attack, int defense) {
                                                                                         
        this.name = name;
        this.type = type;
        this.hp = hp;
        this.speed = speed;
        this.attack = attack;
        this.defense = defense;
    }

    public int getHp() {
        return this.hp;
    }

    public void setHp(int num) {
        this.hp = num;
    }
}
import Monster.java;

public class Hello {
    public static void main(String[] args) {
        Monster m = new Monster("name1", "type1", 20, 1, 2, 3);
        m.setHp(200);
        System.out.println(m.getHp());
    }
}

我想到了。 我所要做的就是在 Player class 中将 monster 变量设置为 public,然后我使用点运算符访问和更新 hp 变量。 感谢您的帮助!

假设我们有一个 Monster 并且我们计算了一些伤害:

Monster monster = getMonster();
int damage = calculateDamage();

我们可以计算 HP,然后将其分配回 Monster:

int remainingHp = monster.getHp() - damage;
monster.setHp(remainingHp);

这可以简化为:

monster.setHp(monster.getHp() - damage);

请注意,没有边界检查。 如果伤害大于怪物的 HP 会怎样? go负值有意义还是应该降为0? 考虑给 Monster 添加一个方法:

public class Monster {
  ... stuff ...
  /**
   * @return true if the Monster is still alive, false if it has died
   */
  public boolean acceptDamage(int damage) {
    hp = hp - damage;
    if (hp > 0) {
      return true;
    }
    // doh - we died!  set HP to 0 and return false
    hp = 0; 
    return false;
  }



  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM