我正在写一个简单的数独求解器。我有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());
当我打印出上面的字符串时,有人能告诉我为什么我一直只得零吗?
答案 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));