如何将一个2D阵列的每个i行与另一个2D阵列的每个i行连成

时间:2016-06-15 18:34:07

标签: multidimensional-array 2d

在我的java应用程序中,我有一个方法,它返回三个2D数组。所有相同大小的行和列。例如,假设这些是我的方法返回的三个2D数组

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

B = [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]

现在我想要实现的是创建另一个方法并再次返回三个2D数组但是现在第一个2D数组应该具有上面每个2D数组的第一行,第二行应该具有上面每个2D数组的第二行所以对于第三个新的2D阵列。

我整天都想着怎么做,但我仍然没有弄明白如何实现它。我真的很感激,如果有人建议我如何做或更好地发布一些代码行,所以我会知道如何继续进行

2 个答案:

答案 0 :(得分:0)

你必须编写一个方法,在其中为每个数组提供三个原始数组和行长度(我建议为每个新行数组编写一个不同的方法,保持代码更清晰)然后只迭代每个数组提供的数组。

public int [] [] newRowOneArray(int rowLength,int [] [] a,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行的[1] [i])

答案 1 :(得分:0)

我写了一个简单的课来帮助你。它接收一个矩阵列表[i] [m] [n]其中i(numMatrices)= m(行)= n(cols)并返回一个相同大小的三维数组,所有行k放入行中的矩阵k 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("");
        }
    }
}

在调用combine()

之前
Matrix 1
111
222
333

Matrix 2
111
222
333

Matrix 3
111
222
333

调用combine()

之后
Matrix 1
111
111
111

Matrix 2
222
222
222

Matrix 3
333
333
333

请记住,我的矩阵实现存储为列列表。对于某些人来说,存储行列表可能更直观。要使行列表起作用,您只需更改以下一行:

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

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

我希望这有帮助!

- 汤姆