我正在尝试为数独创建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];
研究很快就发现,这不会削减它。
感谢您提前获取任何帮助!
答案 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);
}
画报:
如果您需要更改网格,只需更改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];
你现在这样做会产生编译错误。