在Java中创建列表的2D数组

时间:2013-04-10 14:46:38

标签: java arrays list pointers null

我正在尝试为数独创建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];

研究很快就发现,这不会削减它。

感谢您提前获取任何帮助!

4 个答案:

答案 0 :(得分: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);
    }

画报:

enter image description here

如果您需要更改网格,只需更改gridSize的值。

答案 1 :(得分:2)

You cannot create array of generic lists

您可以创建列表列表:

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

然后按照您的意愿填充它。

或使用演员:

List[][] soduko = (List<IntegerNode>[][]) new LinkedList[9][9];

答案 2 :(得分: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);
        }
    }
}

答案 3 :(得分:0)

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

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

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