簡體   English   中英

用Java創建列表的2D數組

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

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