Java 二维数组在While循环中不改变值
出于某种原因,2D实例整数数组在while循环中没有将其变量的值更改为0。board是另一个具有完整数独板的2D int数组,solve_1通过从1到9开始测试来解决数独问题,而solve_2通过回溯方法从9到1来解决数独问题,两者都工作正常。因此,如果存在多个解决方案,则两种方法的2D阵列输出model_1和model_2将有所不同。 2D数组拼图存储最后一个唯一的数独网格。print方法输出数组,但没有一个正方形变为0,尽管循环经过无限次迭代而没有堆栈溢出,即到达注释行但没有将任何int变为0。线路在环路外工作,当然只有一次Java 二维数组在While循环中不改变值,java,arrays,sudoku,Java,Arrays,Sudoku,出于某种原因,2D实例整数数组在while循环中没有将其变量的值更改为0。board是另一个具有完整数独板的2D int数组,solve_1通过从1到9开始测试来解决数独问题,而solve_2通过回溯方法从9到1来解决数独问题,两者都工作正常。因此,如果存在多个解决方案,则两种方法的2D阵列输出model_1和model_2将有所不同。 2D数组拼图存储最后一个唯一的数独网格。print方法输出数组,但没有一个正方形变为0,尽管循环经过无限次迭代而没有堆栈溢出,即到达注释行但没有将任何int变为
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);
}
}
我不太理解它,但我相信问题在于,您应该在方法中作为参数传递board值,就像在makePuzzle(board)中一样
除非将board变量设为全局变量,否则该变量在方法中不应有值。因为java认为内部电路板与外部电路板不同,所以我对其理解不太清楚,但我认为问题在于,您应该在方法中将电路板值作为参数传递,就像在makePuzzle(board)中一样
除非将board变量设为全局变量,否则该变量在方法中不应有值。因为java认为内部板与外部板不同,所以“除非将board变量设为全局变量,否则方法中不应该有值”。如果这句话-->model=board;如果未给出编译错误,则“board”是类的全局变量。除row和col之外的所有变量都是全局变量。“除非将board变量设置为全局变量,否则它在方法中不应有值”。如果这句话-->model=board;如果没有给出编译错误,则“board”是类的全局变量。除row和col之外的所有变量都是全局变量。您能显示完整的代码吗?我觉得这个
model=board
和puzzel=model
很可疑。要知道,这不是int[]
的副本,只是一个参考。这三个变量将指向同一个对象。@Jorn Vernee似乎已经消除了我的基本误解。如果有效,将进行更新。如果你将此作为答案发布,我将选择它。但我还是不明白为什么模型不能改变,如果模型改变了,董事会也应该改变,对吗?为什么它们在while内部是不可变的,而在while外部是不可变的?除非你展示更多的代码,否则我不能给出一个真正的答案。最好是a。你说有些事情你还是不懂,也许我也可以回答。你能出示你的全部代码吗?我觉得这个model=board
和puzzel=model
很可疑。要知道,这不是int[]
的副本,只是一个参考。这三个变量将指向同一个对象。@Jorn Vernee似乎已经消除了我的基本误解。如果有效,将进行更新。如果你将此作为答案发布,我将选择它。但我还是不明白为什么模型不能改变,如果模型改变了,董事会也应该改变,对吗?为什么它们在while内部是不可变的,而在while外部是不可变的?除非你展示更多的代码,否则我不能给出一个真正的答案。最好是a。你说有些事情你还不明白,也许我也可以回答。