2013-04-28 99 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