簡體   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