我的Sudoku Solver遇到了一些我需要做的问题,我应该做的是创建一个程序来检查输入的Sudoku难题是否正确。我有代码检查每行,列和“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
我完全迷失了如何编写这种方法来输出,有人能为我解释一下吗? (也忽略了所有sudokus都返回“正确!”的事实。我应该能够自己解决这个问题。)
答案 0 :(得分:3)
if(column == size - 1) {
column = 0;
row++;
}
使用上面的if-statement
,你不要让内循环得到terminated
,因为每当column
值到达死胡同时,你就是resetting
它到0
,因此内循环(column < size)
的终止条件将始终为真,并且您也会连续增加row
值,这将逐渐导致ArrayIndexOutOfBounds
。< / p>
只需移除if
条件即可。这不是必需的。
答案 1 :(得分:1)
我现在至少有4个问题:
row
)循环结束时打印换行符if(row == temp - 1)
循环应仅在外部循环中(您希望在其自己的行上执行此操作,而不是每次都在列中column == temp-1
等仅适用于2x2案例,应为column > 0 && column % temp == 0
for
循环变量,这会使所有内容混淆,并且通常会导致ArrayIndexOutOfBoundsException
,如此处所示。