2014-02-26 118 views
0

我想調試pickPlayers。添加「選擇」後,列表「播放器」成功填充,但當調用「isPlaying」時,它爲空。當方法調用另一個方法時,ArrayList是否爲空?

任何人都可以看到爲什麼?我確保推入第一個元素,因此它實際上不應該是 null數組列表;一旦完成並且「正在播放」,我就看不到它在哪裏排空球員。

public abstract class Game { 
protected ArrayList<Player> players; 

public Game(String gameName, int numPlayers) { 
    this.name = gameName; 
    this.totalPlayers = numPlayers; 
} 

public void pickPlayers(ArrayList<Player> players, int num){ 
    // rand int between 0 and number of players 
    Random generator = new Random(); 
    int rand = generator.nextInt(num) + 0; 

    Player choice = null;  
    int i = 0; 

    // first player 
    for (Player player: players){ 
     if (i == rand){ 
      choice = player; 
     } 
     i++; 
    } 
    players.add(choice); 
    i=1; 

    while (i < num){ 
     rand = generator.nextInt(num) + 0; 

     int a=0; 
     for (Player player: players){ 
      if (a == rand){ 
       choice = player; 
       System.out.println(choice.getName()); 
      } 
      a++; 
     } 

     if (!isPlaying(choice)){ 
      i++; 
      players.add(choice); 
      choice.play(); 
      System.out.println(choice.getName()); 
     } 
    } 
} 

public boolean isPlaying(Player p){ 
    return players.contains(p); 
} 
} 

回答

0

您正在從列表中選取隨機播放器並添加到相同列表中。另一件事是你在循環之外添加選擇。

你也永遠不會初始化

protected ArrayList<Player> players; 

所以總是空這是一個實例變量。當您致電pickPlayers()函數players是一個局部變量。

+0

我的確在編輯一個通過的文件,而不是我通過的狀態文件。我的教授在文檔中指出,通過的文件和狀態文件中的文件名是相同的(可能是錯字?)一旦我改變了名稱並初始化了數組列表,它就可以正常工作。十分感謝你的幫助。 –

0

要修改ArrayList的是傳遞到pickPlayers方法是局部的方法Players

無論此ArrayList傳遞給isPLayer或不ArrayList中傳遞給pickPlayers

0

因爲他們是不同的對象。在pickPlayers中操作的players列表是一個參數,但isPlaying中的一個是Game的成員。

0

您將玩家傳遞給​​,這是不必要的,因爲piclPlayers()與ArrayList玩家所在的同一個類中。 ArrayList播放器是實例變量ane,它在整個類中都是可見的。因此,不要將數組列表播放器傳遞給同一類中的方法。

0

你必須實例化ArrayList。
你必須做的球員=新的ArrayList();裏面pickPlayers方法。
之後,您可以添加對象,否則它會顯示NullPointerException。

相關問題