【发布时间】:2017-03-25 20:04:16
【问题描述】:
由于某种原因,二维实例整数数组在 while 循环内没有将其变量的值更改为 0。 board 是另一个具有完整数独板的 2D int 数组,solve_1 通过从 1 到 9 开始测试来解决数独问题,而 solve_2 通过回溯方法从 9 到 1 来解决数独问题,两者都正常工作。因此,如果有超过 1 个解决方案,两种方法的 2D 数组输出 model_1 和 model_2 会有所不同。 二维数组拼图存储最后一个独特的数独网格。 print 方法输出数组,但没有一个平方变为 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);
}
}
【问题讨论】:
-
你能展示你的完整代码吗?
-
这
model = board和puzzel = model在我看来很可疑。知道这不会复制int[],只是一个参考。这 3 个变量将指向同一个对象。 -
@Jorn Vernee 似乎已经消除了我的基本误解。如果有效会更新。如果您将此作为答案发布,我会选择它。但是我还是不明白为什么不能换型号,换型号的话板子也该换了吧?为什么它们在 while 内部都是不可变的,而在外部不可变?
-
除非您显示更多代码,否则我无法给出真正的答案。最好是minimal reproducible example。你说有些东西你还是不明白,或许我也可以回答。