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

Вы хотите 0s перезаписать? – Antimony

+0

да ... просто пытается скопировать диагональ. – user2328060

+0

Скопируйте один диагональный элемент в другую диагональ, не так ли? – vidit

ответ

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

Edit: Если все, что вам нужно сделать, это скопировать противоположный по диагонали на главной диагонали, это гораздо проще.

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

Спасибо, второй сделал это. Я не могу поверить, что все было так просто. – user2328060

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