java 错误:无法从静态上下文引用非静态方法“setState(model.states.PlayerState)”[重复]

lmyy7pcs  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(134)
    • 此问题在此处已有答案**:

(13个答案)
3小时前关门了。
我正在为一个基于文本的冒险(Java)编写代码,它在学校被称为Zuul的世界,我必须为玩家实现一个健康状态。我做了一个接口类:

public interface PlayerState {
    public void heal();
    public void injure(int damage);
    public String getState();
}

我还编了三节课:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
这里的问题是Player-class中的setState方法:

public class Player {
   
    private PlayerState state;

    public Player(){
    }

    public void setState(PlayerState state) {
        this.state = state;
    }
    public void heal(){
        state.heal();
    }
    public void injure(int damage){
        state.injure(damage);
    }
    
    public String showStatus(){
        StringBuilder longStatus = new StringBuilder("> Status of the Player");
        longStatus.append("\nhealtj state: "+ state.getState());
        String fullStatus = longStatus.toString();
        return fullStatus;
    }
}

这不是完整的播放器代码,但重要的部分。如果我尝试代码,有这样的错误:
无法从静态上下文引用非静态方法"setState(model. states. PlayerState)"
它出现了三次,每个州一次。
我希望这不是太多或少来解释我的问题。希望有人能帮助我。
ChatGpt建议我这样做:

public Player(){
    Player player = new Player();
    player.setState(new PlayerState);
}

这没有意义,因为我已经在Game-class中声明了Player对象。

5gfr0r5j

5gfr0r5j1#

谢谢大家。
解决方案是在美国实现播放器,如下所示:

public class ImmobileState implements PlayerState{
    Player player;
    public void ImmobileState(){}
    public void heal(){
        System.out.println("Player is now healthy");
            player.setState(new HealthyState());

    };
    public void injure(int damage){
        System.out.println("You was already immobile, so nothing happened?");
        player.setState(new ImmobileState());
    };
    public String getState(){return "Immobile";};
}

这样你就可以使用当前的播放器。这里重要的是不要声明一个新的播放器,因为这会干扰当前的播放器

相关问题