0

数独ソルバーで問題が発生しました。入力した数独パズルが正しいかどうかをチェックするプログラムを作成する必要があります。各行、列、および「ミニボックス」が機能しているかどうかを確認するコードがあります。私の唯一の問題は、パズルを印刷することです。これは私がこれまでに持っているものです:

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、内側のループにを取得させることはできませんterminatedcolumn値が行き止まりに達するたび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 に答える