2011-11-25 37 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,則會出現越界異常。其他的似乎很好。