Java 二维数组在While循环中不改变值

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变为

出于某种原因,2D实例整数数组在while循环中没有将其变量的值更改为0。board是另一个具有完整数独板的2D int数组,solve_1通过从1到9开始测试来解决数独问题,而solve_2通过回溯方法从9到1来解决数独问题,两者都工作正常。因此,如果存在多个解决方案,则两种方法的2D阵列输出model_1和model_2将有所不同。 2D数组拼图存储最后一个唯一的数独网格。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);
    }
}

我不太理解它,但我相信问题在于,您应该在方法中作为参数传递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。你说有些事情你还不明白,也许我也可以回答。