Java Method正在跳过return语句

时间:2016-12-15 21:04:09

标签: java stack return

这个java方法正在跳过return语句。我想知道是否有人遇到过此问题并知道解决方案。无论错误是什么,它都非常微妙。

public GameState getNextGameState() {
    if (player.getLives() > 0) {
        if (!player.isAlive()) {
            System.out.println("checkpoint 1");
            player.setIsAlive(true);
            return new PlayField(width, height, hiScores, player.setCoordinates(width / 2, height - 8),
                    stagePattern, stage);
        }
        System.out.println("checkpoint 2");
        if(++stage > 29)
            stage = 0;

        return new PlayField(width, height, hiScores, player.setCoordinates(width / 2, height - 8), stage);
    }
    return new GameOver(Game.key, hiScores, player.getRank());
}

这是一个带有控制台输出的屏幕截图来证明它: enter image description here

此外,当我将游戏状态放在堆栈结构中时,这个错误才开始发生。这是我现在用于游戏状态转换的代码:

public void update() {

    gsm.peek().update();

    if(gsm.peek().finished)
        if(gsm.peek().getNextGameState() == null)
            gsm.pop();
        else
            gsm.push(gsm.pop().getNextGameState());             
}

gsm声明是:

public static Stack<GameState> gsm = new Stack<GameState>();

希望有人有一些见解。谢谢!

2 个答案:

答案 0 :(得分:1)

这不是同一个电话的结果 你在这里打电话两次。
第一次没有活着,第二次活着。所以你在输出中都有这两个消息 在游戏中,更新阶段以连续方式调用 只需在方法开头添加System.out.println(即条件之前),即可获得确认:

public GameState getNextGameState() {

     System.out.println("enter method");
     ...
}

答案 1 :(得分:1)

你可以发布更多代码吗?您可能正在调用它两次并且它不会跳过返回。如果你真的认为它是一个突破点,可以帮助你调试和观察代码运行。