0

我的数独求解器出现了一些问题,我需要制作,我应该做的是创建一个程序来检查输入的数独谜题是否正确。我有检查每一行、每一列和“minibox”是否工作的代码。我现在唯一的问题是打印出拼图。这是我到目前为止所拥有的:

public String printGrid(int size, int[][] puzzle){
    double temp = Math.sqrt(size);

    for(int row = 0; row < size; row++){
        for(int column = 0; column < size; column++){
            System.out.print(puzzle[row][column]);

            if(column == temp - 1) {
                System.out.print("|");   
            }

            if(row == temp - 1){
                for(int i = 0; i < size; i++){
                    System.out.print("-\t");
                }
            }

            if(column == size - 1) {
                column = 0;
                row++;
            }
        }
    }
    return "Correct!";
}

例如,大小为 4,输入的数独为:

 1 2 3 4
 4 3 2 1 
 3 4 1 2
 2 1 4 3

我的输出看起来像这样:

 1 2 | 3 4
 4 3 | 2 1
 ----+----
 3 4 | 1 2
 2 1 | 4 3

但是,我当前的代码给出了 ArrayOutOfBounds 错误并输出:

 -  2-  -   -   -   1-  -   -   -   4|121|43

我完全迷失了如何编写这个方法来输出,任何人都可以为我解释一下吗?(也忽略所有数独都返回“正确!”的事实,我自己应该能够弄清楚。)

4

2 回答 2

3
if(column == size - 1) {
    column = 0;
    row++;
}

使用上述方法if-statement,您不会让内循环获取terminated,因为每次column值到达死胡同,您就是resetting0,因此内循环的终止条件(column < size)将始终为真,并且您正在不断增加row值,这将逐渐产生ArrayIndexOutOfBounds

只需删除该if条件。它不是必需的。

于 2012-12-03T21:12:19.960 回答
1

您至少有 4 个我立即看到的问题:

  1. 您不会在外部 ( row) 循环的末尾打印换行符
  2. 循环应该只在外循环中if(row == temp - 1)(你想在它自己的行上做,而不是每次都在列中
  3. column == temp-1等仅适用于 2x2 情况,它应该是column > 0 && column % temp == 0
  4. 永远不要修改for循环内的循环变量,这会混淆一切,通常会导致ArrayIndexOutOfBoundsException,就像这里发生的那样。
于 2012-12-03T21:16:34.017 回答