构造偏斜对称矩阵

时间:2015-07-08 18:34:08

标签: java

我正在尝试构建一个偏斜对称矩阵。我可以打印底片,但我无法将对角线打印为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];

        }
    }
}

3 个答案:

答案 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++)