java对角线2d数组副本

时间:2013-04-28 02:08:21

标签: java multidimensional-array

我正在尝试创建一个方法,以对角方式复制数组中的元素。

{{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];
    }
}

但这似乎不起作用。任何人都可以帮我解决我的代码有什么问题吗?感谢。

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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];
        }
    }