0

我正在尝试为数独创建一个二维列表数组。基本上 81 列出了每个包含数独网格中该框的可能解决方案。到目前为止,我已经尝试了多个声明,但是每当我尝试向列表添加值时,它都会返回一个空指针异常。这是一个示例,只需使用数字 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];

研究很快表明,这不会削减它。

提前感谢您的帮助!

4

4 回答 4

4

试试这个。一般的想法是,创建一个主列表,然后在循环遍历它时创建一个内部列表。

    /* 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 的值。

于 2013-04-10T15:10:47.870 回答
2

您不能创建通用列表数组

您可以创建列表列表:

List<List<List<Integer>>> soduko = new ArrayList<>();

然后根据需要填充它。

或使用铸造:

List[][] soduko = (List<IntegerNode>[][]) new LinkedList[9][9];
于 2013-04-10T14:52:10.193 回答
0

您已经创建了数组,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);
        }
    }
}
于 2013-04-10T14:50:50.203 回答
0

如果您知道您需要 81 个 2D 数组,则可以创建 3D 数组:

int[][][] sudoku = new int[81][9][9];

你现在这样做的方式会产生编译错误。

于 2013-04-10T14:57:12.730 回答