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

时间:2015-04-18 11:49:52

标签: java tostring

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

  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;
}

这是测试类:

  public class SudokuTest {

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

当我打印出上面的字符串时,有人能告诉我为什么我一直只得零吗?

2 个答案:

答案 0 :(得分:3)

我不确定您是否发布了完整的代码,但是在第二个构造函数中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
        }
     }
   }

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

输出:

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

答案 1 :(得分:0)

请更改行

character = sud.charAt(pos)+"";

..为:

sudoku[i][j] = Character.getNumericValue(sud.charAt(pos));