由于某种原因,2D 实例整数数组没有在 while 循环内将其变量值更改为 0。 board是另一个具有完整数独板的2D int数组,solve_1通过从1开始测试到9来解决数独,solve_2通过回溯方法从9到1来解决数独,两者都工作正常。因此,如果有超过 1 个解决方案,则两种方法的二维数组输出 model_1 和 model_2 将有所不同。2D 数组拼图存储最后一个独特的数独网格。 print 方法输出数组,但没有一个方 block 更改为 0,尽管循环经历无限迭代而没有堆栈溢出,即到达注释行但不会将任何 int 更改为 0。该行在循环外工作,当然只有一次。
private void makePuzzle() {
model = board;
int row, col;
while (Arrays.deepEquals(model_1, model_2)) {
puzzle = model;
row = r.nextInt(9);
col = r.nextInt(9);
model[row][col] = 0; //this line is problematic
solve1(0, 0);
solve2(0, 0);
System.out.println(row+" "+col);
print(model);
}
}
我不太理解它,但我相信问题是你应该将棋盘值作为方法中的参数传递,如 makePuzzle(board)
除非将 board 变量设置为全局变量,否则它不应该在方法内有值。因为java认为内板和外板不一样
我是一名优秀的程序员,十分优秀!