我是 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/