[英]Java - Filling multidimensional (2d) ArrayList like a 2d array
前一陣子,我習慣了面向對象的編程之前,我創建了一個基本的TicTacToe游戲,並使用數組創建了棋盤。
該代碼是一團糟,因為我沒有正確理解如何使用對象,但是我確實正確地初始化了板子:
char[][] board = new char[3][3];
for (int i = 0; i < board.length; i++){
for (int j = 0; j < board[i].length; j++){
board[i][j] = '[]' //or something like that...don't remember exactly
}
}
我的問題是,如何使用ArrayList?
ArrayList <ArrayList<Character>> board = new ArrayList(); // this initialization is not
// wrong using Java 8 but for earlier versions you would need to state the type on both
//sides of the equal sign not just the left
for (int i = 0; i < board.size(); i++){
for (int j = 0; j < board.get(i).size(); j++){
board.get(i).get(j).add('[]');
}
}
但這不起作用。
它不必完全像這樣,我通常只想了解如何處理多維ArrayList。
-謝謝
與數組不同,您不能直接初始化整個ArrayList。 您可以事先指定期望的大小(在使用非常大的列表時,這有助於提高性能,因此始終執行此操作是一種很好的做法)。
int boardSize = 3;
ArrayList<ArrayList<Character>> board = new ArrayList<ArrayList<Character>>(boardSize);
for (int i = 0; i < boardSize; i++) {
board.add(new ArrayList<Character>(boardSize));
for (int j = 0; j < boardSize; j++){
board.get(i).add('0');
}
}
主要區別在於,在原始代碼中,您具有多維的原語數組(在本例中為char
),而您要做的就是為數組中的每個插槽分配一個新的原語值。
但是,您現在想要的是一個ArrayList
of( Character
ArrayList
)。 當您創建ArrayList
它為空。 為了繼續進行,您將需要先用幾個( ArrayList
of Character
)填充它,然后才能開始自己添加Character
。
例如
ArrayList <ArrayList<Character>> board = new ArrayList<>();
for (int i=0; i<3; i++) {
board.add(new ArrayList<Character>());
}
現在,您可以開始將Character
添加到列表中:
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
board.get(i).add('A');
}
}
希望這可以幫助。
首先,您必須正確地在第一行中初始化ArrayList,然后在第一次循環的每次運行中都必須初始化一個新的ArrayList:
ArrayList <ArrayList<Character>> board = new ArrayList<ArrayList<Character>>();
for (int i = 0; i < 3; i++){
ArrayList<Character> innerList = new ArrayList<Character>();
board.add(innerList);
for (int j = 0; j < 3; j++){
innerList.add('[');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.