0

我正在尝试制作一种对角线复制数组中元素的方法。

{{0,0,0,0,9},
 {0,0,0,8,0},
 {0,0,7,0,0},
 {0,6,0,0,0}, 
 {5,0,0,0,0}}

变成

{{9,0,0,0,9},
 {0,8,0,8,0},
 {0,0,7,0,0},
 {0,6,0,6,0},
 {5,0,0,0,5}}

我试过了:

for(int i = 0; i < a.length; i++) {
    for(int j = 0; j < a[i].length; j++) {
        a[i][j] = a[a.length-1][j];
    }
}

但这似乎不起作用。谁能帮我解决我的代码有什么问题?谢谢。

4

2 回答 2

0

您没有指定它是如何“不工作”的,但看起来问题是您只希望旧值被覆盖为非零值。

如果是这样,您需要做的就是添加额外的检查。您总是使用最后一列的索引也有问题。您需要i从右侧的索引中减去。

for(int i = 0; i < a.length; i++)
{
    for(int j = 0; j < a[i].length; j++)
    {
        int temp = a[a.length-i-1][j];
        if (temp != 0) {a[i][j] = a[a.length-i-1][j];}
    }
}

编辑:如果您只想将对角线复制到主对角线上,那就简单多了。

for(int i = 0; i < a.length; i++)
{
    a[i][i] = a[a.length-1-i][i];
}
于 2013-04-28T02:14:04.373 回答
0

尝试这个

for(int i = 0; i < a.length; i++)
    {
    for(int j = 0; j < a[i].length; j++)
        {
            if (i==j)
            a[i][j] = a[i][a[i].length-1-j];
        }
    }
于 2013-04-28T02:22:15.940 回答