这个 toString() 方法有什么问题?

What is wrong with this toString() method?

我正在编写一个简单的数独求解器。我有 2 个构造函数,第一个在其参数中有一个二维数组,并用它来初始化一个数独变量。第二个接收一个字符串(长度为 81 个数字)并使用该字符串初始化二维数组。像这样:

  public class Sudoku {
   private int sudoku[][];

   public Sudoku(int sud[][]){
    sudoku = new int[sud.length][sud.length];
    for(int i=0; i<sudoku.length; i++){
        for(int j=0; j<sudoku.length; j++){
            sudoku[i][j]=sud[i][j];
        }
    }
   }

   public Sudoku(String sud){
    int pos = 0;
    String character="";
    sudoku = new int[sud.length()/9][sud.length()/9];
    for(int i=0; i<sudoku.length; i++){
        for(int j=0; j<sudoku.length; j++){
            pos = i*sud.length()/9 + j;
            character = sud.charAt(pos)+"";
        }
    }
   }.....

这是以下 toString() 方法:

  public String toString(){
    String sudoOut = " ";
    for(int j = 0; j<sudoku.length; j++){
        sudoOut = sudoOut+" | ";
        for(int z = 0; z<sudoku.length; z++){
            sudoOut = sudoOut+sudoku[j][z]+" ";
            System.out.println(sudoku[j][z]);

            if(z != 0 && (z+1)%3 == 0 && z+1 < sudoku.length){
                sudoOut = sudoOut + "| ";
            }
        }
        sudoOut = sudoOut+"|\n";

        if(j != 0 && (j+1)%3 == 0 && j+1 < sudoku.length){
            sudoOut = sudoOut;
        }

    }
    sudoOut = sudoOut;
    return sudoOut;
}

这是测试-class:

  public class SudokuTest {

    public static void main(String[] args){
    Sudoku sudoku;
    String sud =   "2500309010100040004070002080052000000000981000400030000003600720700000039030006 04";
    sudoku = new Sudoku(sud);
    System.out.println(sudoku.toString());

谁能告诉我为什么当我打印上面的字符串时总是只得到零?

我不确定您是否发布了完整代码,但在您的第二个构造函数中 - Sudoku(String sud) - 您从未向 soduku 数组分配任何内容。您只需实例化它。

我假设您的意图是这样的:

   public Sudoku(String sud){
     int pos = 0;
     String character="";
     sudoku = new int[sud.length()/9][sud.length()/9];
     for(int i=0; i<sudoku.length; i++){
        for(int j=0; j<sudoku.length; j++){
            pos = i*sud.length()/9 + j;
            character = sud.charAt(pos)+"";
            sudoku[i][j] = Integer.parseInt(character); // you forgot this
        }
     }
   }

您还应该从输入字符串中删除 space。

输出:

  | 2 5 0 | 0 3 0 | 9 0 1 |
 | 0 1 0 | 0 0 4 | 0 0 0 |
 | 4 0 7 | 0 0 0 | 2 0 8 |
 | 0 0 5 | 2 0 0 | 0 0 0 |
 | 0 0 0 | 0 9 8 | 1 0 0 |
 | 0 4 0 | 0 0 3 | 0 0 0 |
 | 0 0 0 | 3 6 0 | 0 7 2 |
 | 0 7 0 | 0 0 0 | 0 0 3 |
 | 9 0 3 | 0 0 0 | 6 0 4 |