gpt4 book ai didi

java - 在构造函数中复制矩阵时的行为非常奇怪

转载 作者:行者123 更新时间:2023-12-01 10:56:07 24 4
gpt4 key购买 nike

我正在创建一个类,它存储一个表示数独的 9x9 int 矩阵:

private final int sudoku[][];

我正在创建一个构造函数,它接受一个矩阵并将其复制到我之前声明的变量中:

public SudokuMatrix(int[][] sudoku)
{
this.sudoku= new int[9][];

if (sudoku.length != 9 || sudoku[0].length != 9)
{
throw new IllegalArgumentException("Wrong dimension!");
}
else
{
for (int i = 0; i < 9; i++)
{
this.sudoku[i] = sudoku[i].clone();
}

}
}

这应该没什么大不了的,但是当我尝试将它与这样的矩阵一起使用时:

int[][] init = new int[][]{
{0, 0, 5, 0, 2, 1, 7, 0, 0},
{0, 9, 0, 0, 7, 0, 0, 6, 0},
{8, 0, 0, 3, 5, 0, 0, 0, 4},
{7, 0, 0, 1, 8, 0, 3, 0, 0},
{0, 2, 0, 0, 9, 0, 0, 1, 0},
{0, 0, 1, 2, 6, 0, 0, 0, 7},
{6, 0, 0, 0, 0, 2, 0, 0, 9},
{0, 3, 0, 0, 4, 0, 0, 7, 0},
{0, 0, 4, 5, 0, 0, 8, 0, 0},
};
SudokuMatrix s = new SudokuMatrix(init);

当我打印 s 中包含的矩阵时,我用来打印它的函数(我确定是正确的)应该打印如下内容:

|..5|.21|7..|
|.9.|.7.|.6.|
|8..|35.|..4|
|---+---+---|
|7..|18.|3..|
|.2.|.9.|.1.|
|..1|26.|..7|
|---+---+---|
|6..|..2|..9|
|.3.|.4.|.7.|
|..4|5..|8..|

('.'是数独中的空格,用0值表示)

相反,我得到了这个可怕的事情:

|..♣|.☻☺|..|
|. .|..|.♠.|
..|♥♣.|..♦|
|---+---+---|
|...|♥..|
|.☻.|. .|.☺.|
|..☺|☻♠.|..|
|---+---+---|
|♠..|..☻|.. |
|.♥.|.♦.|..|
|..♦|♣....|

我真的不知道我在哪里做错了,将一个矩阵复制到另一个矩阵中是我从来没有遇到过的问题,所以这与我在构造函数中的事实有关吗?

预先感谢您的任何建议。

编辑:打印代码这是我用来将数独转换为字符串的方法,然后打印它:

public String toString()
{
StringBuilder sdk = new StringBuilder("");
for (int i = 0; i < 9; i++)
{
sdk.append("|");
for (int j = 0; j < 9; j++)
{
if (this.griglia[i][j] == 0)
{
sdk.append(".");
}
else sdk.append((char) this.griglia[i][j]);

if ((j+1)%3 == 0)
{
sdk.append("|");
}
}
if((i+1)%3 == 0)
{
sdk.append("\n");
sdk.append("|---+---+---|");
}
sdk.append("\n");
}

return sdk.toString();
}

最佳答案

当你将 int 转换为 char (char) this.griglia[i][j] 时,它会将其转换为一些奇怪的 ascii 字符。尝试下面的代码来简化您的解决方案。或者改为 else{sdk.append( ""+ this.griglia[i][j])}

也许我会尝试以下方法:

public class HelloWorld
{
public static void main(String[] args)
{
int[][] init = new int[][]{
{0, 0, 5, 0, 2, 1, 7, 0, 0},
{0, 9, 0, 0, 7, 0, 0, 6, 0},
{8, 0, 0, 3, 5, 0, 0, 0, 4},
{7, 0, 0, 1, 8, 0, 3, 0, 0},
{0, 2, 0, 0, 9, 0, 0, 1, 0},
{0, 0, 1, 2, 6, 0, 0, 0, 7},
{6, 0, 0, 0, 0, 2, 0, 0, 9},
{0, 3, 0, 0, 4, 0, 0, 7, 0},
{0, 0, 4, 5, 0, 0, 8, 0, 0},
};
SudokuMatrix s = new SudokuMatrix(init);

s.printMatrix();
}
}

public class SudokuMatrix
{
private final int sudoku[][];



public SudokuMatrix(int[][] sudoku){
this.sudoku= new int[9][9]; //note here I allocated a 9x9 matrix rather than copying each row in the matrix

if (sudoku.length != 9 || sudoku[0].length != 9)
{
throw new IllegalArgumentException("Wrong dimension!");
}
else
{
for (int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++){
this.sudoku[i][j] = sudoku[i][j];
}

}

}
}

public void printMatrix(){
for(int i = 0; i < 9; i++){

String inner = "";
for(int j = 0; j < 9; j++){
if(sudoku[i][j] == 0){
inner += ".";
}
else{inner += sudoku[i][j];}
}
System.out.println(inner);
}
}
}

关于java - 在构造函数中复制矩阵时的行为非常奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33601877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com