繁体   English   中英

Java Sudoku求解器输出

[英]Java Sudoku Solver Output

我的数独解算器遇到一些问题,我应该做的是创建一个程序,检查所输入的数独谜题是否正确。 我有检查每个行,列和“迷你盒”是否正常工作的代码。 我现在唯一的问题是打印拼图。 这是我到目前为止的内容:

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都返回“正确!”的事实,我应该能够弄清楚这一点。)

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

使用上面的if-statement ,您不会让内部循环terminated ,因为每次column值到达死角时,您都resettingresetting0 ,因此内部循环的终止条件(column < size)将始终为true,并且您还在连续增加row值,这将逐渐导致ArrayIndexOutOfBounds

只是删除if条件。 不需要。

您立即至少遇到了4个问题:

  1. 您不在外部( row )循环的末尾打印换行符
  2. if(row == temp - 1)循环应仅在外部循环中(您要在它自己的行上进行,而不是每次在列中进行一次
  3. column == temp-1等。仅适用于2x2情况,它应为column > 0 && column % temp == 0
  4. 永远不要for循环内部修改for循环变量,这会混淆所有内容,并且通常会导致ArrayIndexOutOfBoundsException ,就像这里发生的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM