尽管声明中的 Java 无限循环使条件为假

标签 java while-loop

我是 Java 的新手,但我的问题可能与语言无关。 我有一个 Player 类,在我的游戏逻辑中,我有一个 map 存储创建的玩家。 我编写了一个方法 -getNext() - 将下一位玩家返回给我,它的效果非常好。但在比赛中,被淘汰的选手不得排队。所以我写了一个新方法 -getNextAlive() - 应该返回下一个活着的 (!isLoser) 玩家。如果没有任何失败者,则 getNextAlive() 正在运行,但如果有,程序将进入 while 循环并无限循环。在 while 循环中,我切换到下一个播放器并确保下一个播放器还活着,但我认为 while(p.checkLose()) 在 while 更改中不受影响并永远提供此输出:

玩家:allyozturk

我不明白为什么会这样,我应该怎么做才能跳过所有 isLoser 玩家并获得下一个活着的玩家? (顺便说一句,我使用 libgdx ArrayMap 并且我的 map 是有序的,因为下一个玩家的顺序对我的游戏很重要)

我在游戏中使用:

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 是否完全合适?

最佳答案

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

关于尽管声明中的 Java 无限循环使条件为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39899379/

相关文章:

php - 不要重复字符串多次

java - JHipster 错误 : Could not find or load main class org. apache.maven.wrapper.MavenWrapperMain

java - JSF:在 h:dataTable 中垂直显示 h:selectManyCheckBox

java - 优化 MySQL 中的日期查询

javascript - 为什么当promise的async函数中有while循环时,JS会停止主线程的执行?

algorithm - while循环时间复杂度

Java正则表达式得到不匹配的部分

java - hibernate 异常 LockAcquisitionException : could not update

c - C语言中如何跳出while循环

python - 如何在python中的while循环语句中使用迭代器