2016-10-06 89 views
2

我是新Java的,但我的问题可能是语言无关。 我有一个球员类,在我的游戏逻辑中,我有一个地图商店创建的球员。 我写一个方法 - getNext() - 即下一个玩家回到我和它的工作原理就像一个魅力。但是在比赛中,淘汰的球员不能排队。所以我写了一个新方法 - getNextAlive() - 应该返回下一个活着(!isLoser)播放器。如果没有任何失败者,getNextAlive()正在工作,但如果存在,程序将进入while循环并无限循环。在while循环我切换到下一个球员,相信未来还活着,但我认为while(p.checkLose())不会受到影响,而在变化,永远给这个输出:尽管在声明的Java无限循环,使病情假

球员:allyozturk

我不知道为什么这种情况发生在通过这种方式,我应该怎么做才能跳过所有失明球员并获得下一个活着的球员? (顺便说一句,我使用libgdx ArrayMap,我的地图,因为未来的球员的顺序进行排序是importont我的游戏)

在游戏中使用:

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; 
     } 
    } 

和加法的问题,从一些好奇到来,一些做最好的:它是完全恰当的使用方法,在播放器类返回播放器?

+2

调试你的索引值。 –

+2

你的'checkLose()'功能在哪里? – AsheraH

+1

恕我直言,返回其他有效玩家的方法应该在你的'MyGdxGame'中,而不是'Player'本身。也许这可能会让事情变得更容易理解。 –

回答

8

程序运行时更换p = getNext();p = p.getNext();

+1

是的,在你的循环中,玩家总是在循环中调用下一个自己,没有得到“nextPlayers”的下一个玩家 – Ash

+0

我刚刚意识到这一点,并来到这里删除我的问题,看到它已经太晚了:)好吧,我现在觉得很愚蠢,应该删除这个问题,但对于像我这样的其他人,只是要更加小心:) – allyozturk

+4

每当你感到愚蠢,你会学到:) – talex