我正在尝试构建一个偏斜对称矩阵。我可以打印底片,但我无法将对角线打印为0.我在逻辑上哪里错误?
public void SkewSymmetric() {
for (int i = 0; i < matrix.length; ++i) {
for (int j = 1; j < matrix.length; i++) {
matrix[i][j] = random.nextInt(BOUND);
}
}
for (int i = 9; i < matrix.length; ++j) {
for (int j = 0; j < i; ++j) {
matrix[j][j] = -matrix[i][i];
}
}
}
答案 0 :(得分:2)
第二个块中的内循环需要从i + 1运行。
否则,跟踪通常是非零的。
答案 1 :(得分:2)
您正在将矩阵中的所有值设置为0,然后尝试覆盖非对角线值。 而是仅将主对角线值设置为0.
正如Jean所指出的,你的循环值是不正确的。 对于第一行,从第1列到第n列生成随机数 对于第二行,从第2列到第n列生成随机数,依此类推。
试试这个,
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix.length; j++){
if(i==j){
matrix[i][j] = 0;
}
}
}
for (int i = 0; i < matrix.length; i++) {
for (int j = i+1; j < matrix.length; j++) {
matrix[i][j] = random.nextInt();
}
}
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < i; j++) {
matrix[i][j] = -matrix[j][i];
}
}
答案 2 :(得分:0)
问题来自for (int j = i; j < matrix.length; j++)
:在第一次迭代时j == i
,它会删除预先设置的0。
因此您需要将其更改为for (int j = i+1; j < matrix.length; j++)