簡體   English   中英

Java-像二維數組一樣填充多維(2d)ArrayList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM