2015-04-21 131 views
4

我正在爲Collapse遊戲製作2D Arraylist板,但現在只是做一個文本表示。我創建了該板,但是當我嘗試用randomChar()填充它時,所有行都會獲得相同的隨機字符。 我在做什麼錯?2D ArrayList初始化行

public static void createBoard(int rSize, int cSize) { 
    ArrayList<Character> row = new ArrayList<Character>(); 
    ArrayList<ArrayList<Character>> board = new ArrayList<ArrayList<Character>>(); 

    for (int c = 0; c < cSize; c++) { 
     board.add(row); 

    } 
    for (int r = 0; r < rSize; r++) { 
     board.get(r).add(randomChar()); 
     //row.add(randomChar()); 
     // board.get(r).set(r, randomChar()); 
     } 

    //prints out board in table form 
    for (ArrayList<Character> r : board) { 
     printRow(r); 
    } 
    System.out.println(board); 

    } 

回答

5

您正在向電路板多次添加相同的行。因爲在下面要存儲同一對象的參考線

for (int c = 0; c < cSize; c++) { 
    board.add(new ArrayList<Character>()); 
} 
+0

Aaaaah,好的。我想到了這一點,但並沒有想到發生了這種情況。謝謝! –

1

:您必須添加唯一行

for (int c = 0; c < cSize; c++) { 
    board.add(row); 
} 

當你這樣做board.get(r).add(randomChar());所以你會得到所有相同的數值。 你應該使用不同的陣列爲不同的板對象:

for (int c = 0; c < cSize; c++) { 
    board.add(new ArrayList<Character>()); 
}