Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:对象无法解析为变量_Java_Variables_Object - Fatal编程技术网

Java:对象无法解析为变量

Java:对象无法解析为变量,java,variables,object,Java,Variables,Object,我的对象显然无法解析为变量 在Game.Java中: public static void main(String[] args) { Slime slime = new Slime(); } 在Player.Java中: public static void Attack() { System.out.println("Player attacks!"); int dmg = ATTACK; System.out.println(dmg + " damage

我的对象显然无法解析为变量

在Game.Java中:

public static void main(String[] args) {
    Slime slime = new Slime();
}
在Player.Java中:

public static void Attack() {
    System.out.println("Player attacks!");
    int dmg = ATTACK;
    System.out.println(dmg + " damage to Slime!");
    slime.HP -= dmg;
    System.out.println(Player.HP);
}

那么如何从slime的HP中去除dmg呢?我做了一些研究,这仍然没有意义。

Player.java需要有对slime的引用,或者需要通过Attack()方法传入。事实上,第二个更合理

public void attack(Slime opponent) {
    int dmg = ATTACK;
    opponent.HP -= dmg;
}
这将允许你“攻击”多个不同的粘液

另一种方法是在玩家类本身中存储对粘液的引用:

public class Player {
    private Slime slime;
    private static final int ATTACK = 10; // or something

    public void setSlime(Slime slime) {
        this.slime = slime;
    }

    public void attack() {
        int dmg = ATTACK;
        slime.HP -= dmg;
    }
}
实际上,除非你给玩家一些了解黏液实例的方法,否则它不会影响黏液实例

我确实注意到您使用的大多是静态方法,但这里我使用了类变量和非静态方法来实现OOP


另外,Java编码惯例是方法调用应该有小写名称,这就是为什么我更喜欢
attack()
而不是
attack()

这种“攻击”是什么?另外,请添加完整的堆栈跟踪。您的攻击功能是静态的。粘液也是静态的吗?