2016-06-15 19 views
0

私のJavaアプリケーションでは、3次元配列を返すメソッドがあります。すべての行と列のサイズが同じです。例えば、これらは私のメソッドの戻り1次元配列の各i行を別の2次元配列の各i行と連結する方法

= [2,4,5,18 9,4,1,7 14,67,90,2]

B私の3次元配列であると仮定してみましょう= [34,23,1,9 12,5,9,0 14,67,8,1]

C = [2,68,1,1 3,7,0,11 23 、45,5,5]

ここで私が達成したいのは、別の方法を作成して3つの2D配列を返すことですが、最初の2D配列は最初の行f上記の各2D配列の2番目の行には、各2次元配列の2番目の行があり、3番目の新しい2次元配列になります。

私は一日中それをする方法を考えていますが、それを達成する方法はまだ決まっていません。誰かが私にそれをする方法を提案したり、コードの行を投稿して後で進める方法を知ってもらうことができたら、本当に感謝します。

答えて

0

3つの元の配列(新しい行配列ごとに異なるメソッドを記述し、コードをよりきれいに保つことをお勧めします)、次に各提供された配列を繰り返し処理します。そして

公共のint [] [] newRowOneArray(INT rowLength、INT [] []、INT [] []、B、INT [] [] C){

int returnArray[] [] = new int[3][rowLength]; //new 2d array 

for(int i=0; i<rowLength; i++){ 
     returnArray[0][i] = a[0][i]; //place a row one in new row 1 
} 

for(int i=0; i<rowLength; i++){ 
     returnArray[1][i] = b[0][i]; //place b row one in new row 2 

} 

for(int i=0; i<rowLength; i++){ 
     returnArray[2][i] = c[0][i]; //place c row one in new row 3 

} 

return returnArray; 

}

他の2つの新しい配列に対しても同様のメソッドを書くことができます。新しい行に対応する新しいメソッドごとに行の値を変更するだけです(例:行2の場合は[1] [i])

+0

なぜ2次元型ではなく1次元配列の上にメソッドの戻り値として与えているのか混乱していますか?あなたが戻ったときに2D配列を返すので、おそらく間違ったタイプの入力と思われます。私は正しいです –

+0

ええ、それは返される2次元配列でなければなりません。私の戻り値の型は私には正しかったが、多分私は間違っていた。 –

+0

これは完全に正しいですが、私が本当に望むのは、各n - 2D配列のa、b、c、k行だけでなく、int型の引数として置くこともできないn - ] a、int [] [] b、int [] [] cこれ以上は持っています。どのようにそれを行う方法がありますか? :( –

0

私は簡単なクラスを作成しました。それは行列のリストを取り、i(numMatrices)= m(行)= n(cols)であり、すべての行kが行kに置かれた同じ大きさの3次元配列を返すindex =行列インデックス。

public class MatrixManipulator { 

    public int[][][] combine(int[][][] matrices) { 

     // We are making a lot of assumptions here by not checking 
     // that dimension are equal (cubic for this problem) 
     final int numMatrices = matrices.length, numRows = matrices[0].length, numColumns = matrices[0][0].length; 

     int[][][] newMatrices = new int[numMatrices][numRows][numColumns]; 

     for (int i = 0; i < numMatrices; ++i) { 
      for (int m = 0; m < numRows; ++m) { 
       for (int n = 0; n < numColumns; ++n) { 
        newMatrices[i][m][n] = matrices[n][m][i]; 
       } 
      } 
     } 
     return newMatrices; 
    } 

    public void printMatrices(int[][][] matrices) { 
     final int numMatrices = matrices.length, numRows = matrices[0].length, numColumns = matrices[0][0].length; 

     for (int i = 0; i < numMatrices; ++i) { 
      System.out.println("Matrix " + (i + 1)); 
      for (int m = 0; m < numRows; ++m) { 
       for (int n = 0; n < numColumns; ++n) { 
        System.out.print(matrices[i][n][m]); 
       } 
       System.out.println(""); 
      } 
      System.out.println(""); 
     } 
    } 
} 

Matrix 1 
111 
111 
111 

Matrix 2 
222 
222 
222 

Matrix 3 
333 
333 
333 

)(コンバインを呼び出した後()

Matrix 1 
111 
222 
333 

Matrix 2 
111 
222 
333 

Matrix 3 
111 
222 
333 

組み合わせ呼び出す前に行列の私の実装では、列のリストとして保存されている点に注意してください。一部の人にとっては、行のリストを格納する方が直感的です。私はこれが役に立てば幸い

newMatrices[i][m][n] = matrices[m][i][n]; 

newMatrices[i][m][n] = matrices[n][m][i]; 

:あなたが動作するように、行のリストためにはちょうどからこの1行を変更する必要があります!

- Tom

関連する問題