【问题标题】:2-D Array not changing value inside While loop二维数组在 While 循环内不改变值
【发布时间】: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 = boardpuzzel = model 在我看来很可疑。知道这不会复制int[],只是一个参考。这 3 个变量将指向同一个对象。
  • @Jorn Vernee 似乎已经消除了我的基本误解。如果有效会更新。如果您将此作为答案发布,我会选择它。但是我还是不明白为什么不能换型号,换型号的话板子也该换了吧?为什么它们在 while 内部都是不可变的,而在外部不可变?
  • 除非您显示更多代码,否则我无法给出真正的答案。最好是minimal reproducible example。你说有些东西你还是不明白,或许我也可以回答。

标签: java arrays sudoku


【解决方案1】:

我不是很明白,但我认为问题是你应该在方法中将板值作为参数传递,就像在 makePuzzle(board) 中一样

除非您将板变量设为全局变量,否则它不应该在方法中包含值。因为java认为内板和外板不一样

【讨论】:

  • “除非您将板变量设为全局变量,否则它不应在方法内包含值”。好吧,如果这个陈述--->模型=板;没有给出编译错误,那么“板”对类来说是全局的。
  • 除 row 和 col 之外的所有变量都是全局变量。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2013-09-13
相关资源
最近更新 更多