2011-11-25 64 views
2

嘿,即时通讯尝试创建一个随机的方式,从链表中选择一个4人组,并想知道这个代码是否可以工作。从列表中创建一个球员队伍

下面有一个示例代码

public static void enterGame(Client c) { 
    int n = teamSize; 
    boolean startNewGame = false; 
    if(waitingPlayers.size() <= 3) { 
     return; // not enough players 
    } 
    startNewGame = true; 
    if(startNewGame) { 
     System.out.println("Starting new game"); 
     for(int i=0; i<n; i++) { 
      Collections.shuffle(waitingPlayers); 
      System.out.println("Picking random player"); 
      waitingPlayers.remove(c); 
      System.out.println("removing from random player list"); 
      players.add(c); 
      System.out.println("adding player to ingame list"); 
     } 
    } 
} 
+0

欢迎来到Stack Overflow!请不要在未来的其他地方发布您的代码。另外,请阅读[FAQ](http://stackoverflow.com/faq)。 –

回答

3

我会使用Collections.shuffle()和子列表。为了知道你的代码是如何工作的,你为什么不测试它(单元测试还是只是一些尝试)?

而且,这一部分:

boolean startNewGame = false; 
if(waitingPlayers.size() > 3) { 
     startNewGame = true; 
} else { 
     startNewGame = false; 
     return; 
} 
if(startNewGame) { 

是过于复杂,我会被替换为:

if(waitingPlayers.size() <= 3) { 
    return; // not enough players 
} 

全码:

public static void enterGame(final Client c) {  
    if(waitingPlayers.size() <= 3) { 
     return; // not enough players 
    } 

    System.out.println("Starting new game"); 
    Collections.shuffle(waitingPlayers); 
    System.out.println("Picking random players"); 
    // ? to be replaced by the real type of objects inside waitingPlayers 
    final List<?> picked = waitingPlayers.subList(0, 3); 
    players.addAll(picked); 
    waitingPlayers.removeAll(picked); 
} 
+0

你是什么意思的子列表。 – user1064922

+0

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#subList(int,int) – 2011-11-25 06:40:46

+0

谢谢!生病尝试了这一点 – user1064922

0

你有一个错误 - 你是从0到n选择一个数字。如果选择了n,则会出现越界异常。其他的似乎很好。