[英]Create 2D array of Lists in Java
我正在嘗試為Sudoku創建2D列表列表。 本質上,81在Sudoku網格中列出了每個包含該框可能解決方案的列表。 到目前為止,我已經嘗試了多個聲明,但是每當我嘗試向列表中添加值時,它都會返回空指針異常。 這是一個示例,僅用數字1-9填充每個列表。
List<Integer>[][] sudoku = (List<Integer>[][]) new List[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 1; k < 10; ) {
sudoku[i][j].add(k);
}
}
}
我什至不能肯定列表的2D數組是實現此目的的最佳方法,但是到目前為止,我已經從頭開始(對Java的了解相對較少),因此我想繼續使用此方法。 原始代碼如下所示:
List[][] sudoku = new List[9][9];
研究迅速表明,這不會削減成本。
在此先感謝您的幫助!
試試這個。 通常的想法是創建一個主列表,並在遍歷該列表時創建一個內部列表。
/* Declare your intended size. */
int mainGridSize = 81;
int innerGridSize = 9;
/* Your master grid. */
List<List<Integer>> mainList = new ArrayList<List<Integer>>(mainGridSize);
/* Your inner grid */
List<Integer> innerList = null;
/* Loop around the mastergrid */
for (int i=0; i<mainGridSize; i++) {
/* create one inner grid for each iteration of the main grid */
innerList = new ArrayList<Integer>(innerGridSize);
/* populate your inner grid */
for (int j=0; j<innerGridSize; j++)
innerList.add(j);
/* add it to your main list */
mainList.add(innerList);
}
說明:
如果需要更改網格,只需更改gridSize的值即可。
您可以創建列表列表:
List<List<List<Integer>>> soduko = new ArrayList<>();
然后根據需要填充它。
或使用強制轉換:
List[][] soduko = (List<IntegerNode>[][]) new LinkedList[9][9];
您已經創建了Lists
數組,但尚未初始化它。 將其插入第二行,應解決問題。
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++){
sudoku[i][j]=new ArrayList<Integer>();
}
}
或一次完成所有操作,如下所示:
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
sudoku[i][j]= new ArrayList<Integer>();
for (int k = 1; k < 10; ) {
sudoku[i][j].add(k);
}
}
}
如果知道確切需要81個2D陣列,則可以創建3D陣列:
int[][][] sudoku = new int[81][9][9];
您現在執行的方式將產生編譯錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.