2013-04-28 77 views
0

我想制作一个方法,对角地复制阵列中的元素。java对角线2d阵列副本

{{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? – Antimony 2013-04-28 02:10:46

+0

是的...只是试图复制对角线。 – user2328060 2013-04-28 02:13:08

+0

将一个对角元素复制到另一个对角线,对吗? – vidit 2013-04-28 02:14:23

回答

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]; 
} 
+0

谢谢第二个做到了。我不敢相信这很简单。 – user2328060 2013-04-28 02:18:59

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]; 
     } 
    } 
+0

你应该解释你做了什么。 – SomeShinyObject 2013-04-28 02:39:27