这个 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 |
我正在编写一个简单的数独求解器。我有 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 |