我正在尝试创建一个方法,以对角方式复制数组中的元素。
{{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];
}
}
但这似乎不起作用。任何人都可以帮我解决我的代码有什么问题吗?感谢。
答案 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];
}
}