尽管语句中的Java无限循环使条件为假

时间:2016-10-06 14:59:02

标签: java while-loop

我是Java新手,但我的问题可能与语言无关。 我有一个Player类,在我的游戏逻辑中,我有一个地图商店创建的玩家。 我写了一个方法 - getNext() - 将下一个玩家返回给我,它就像一个魅力。但是在游戏中,被淘汰的玩家一定不能排队。所以我写了一个新的方法 - getNextAlive() - 应该返回下一个活着的(!isLoser)播放器。如果没有任何输家玩家,则getNextAlive()正在运行,但如果有,则程序进入while循环并无限循环。在while循环中,我切换到下一个播放器并确定next是活着的,但我认为while(p.checkLose())在更改时不会受到影响,并永远提供此输出:

球员:allyozturk

我无法理解为什么会以这种方式发生这种情况,我应该怎么做才能跳过所有isLoser玩家并获得下一个活着的玩家? (顺便说一句,我使用libgdx ArrayMap,因为下一个玩家的命令是我的游戏,所以我的地图是订购的)

游戏中我使用:

currPlayer = currPlayer.getNextAlive();

这里我的Player.java是:

    public class Player{
        private static int counter;
        public static int alives;

        private int uniqueId;
        private String name;
        private boolean isLoser;
        .
        .
        .
        private Player getNext(){
            int index = MyGdxGame.players.indexOfKey(uniqueId);
            if(++index < MyGdxGame.players.size)
                return MyGdxGame.players.getValueAt(index);
            else
                return MyGdxGame.players.getValueAt(0);
        }

        public Player getNextAlive(){
            Player p = getNext();
            while(p.checkLose()){
                p = getNext();
                MyGdxGame.logger.error("player: " + p.getName()); // just for testing purpose
            }
            return p;
        }
    }

另外一个问题来自于一些好奇心,还有一些是为了做到最好:使用方法在Player类中返回Player是否完全合适?

1 个答案:

答案 0 :(得分:8)

p = getNext();替换为p = p.getNext();