2次元配列(n * n行列)の対角を1次元配列に書きたいとします。JAVA 2次元配列の対角を1次元配列に書く
1 2 3
4 5 6 => 1 5 9
7 8 9
public int[] getDiagonalFromArray(int[][] two_d_array){
int[] diagonal_array = new int[two_d_array[0].length];
int k=0;
for (int i = 0; i < two_d_array[0].length; i++) {
for (int j = 0; j < two_d_array[1].length; j++) {
for (int l = 0; l < two_d_array[0].length; l++) {
diagonal_array[k]=two_d_array[i][j];} //HERE SHOULD BE THE ERROR... HOW DO I CYCLE THROUGH THE 1dim "diagonal_array"?
}
}
return diagonal_array;
}
この方法は間違った値を提供します。
この方法は動作しますが、対角線を1dim配列に入れるのではなく、印刷します。
public void getDiagonal(int[][] two_d_array){
//int[] diagonal_array = new int[two_d_array[0].length];
for (int i = 0; i < two_d_array[0].length; i++) {
for (int j = 0; j < two_d_array[1].length; j++) {
if (i==j) System.out.print(two_d_array[i][j]+" ");
}
}
}
論理的な違いはどこですか?最初のメソッドでif節を試しましたが、 "outofbound" -Exceptionが発生しました。
ありがとうございます。
1次元 - > 1ループ。他の2つのループが何であるかはわかりません。 – tkausl
最初のループは 'two_d_array [0] .length'にループするべきではなく、むしろ' two_d_array.length'にループするべきです。なぜあなたは3つのループを持っているのか分かりませんか?私はちょうど以下の提案された解決の1つを使用することを勧めます。 –