Android java将2d数组分配给3d数组

Android java将2d数组分配给3d数组,java,android,arrays,multidimensional-array,Java,Android,Arrays,Multidimensional Array,我在尝试将2d数组指定给3d数组时遇到问题,所以我想问一个关于3d和2d数组的问题 假设我有一个masterArray[][],并希望将childArray1[]]和childArray2[]]放入其中。 我就是这样做的,我想知道这是否是正确的应用方式: private int[][][] masterArray; private int[][] childArray1 = { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0

我在尝试将2d数组指定给3d数组时遇到问题,所以我想问一个关于3d和2d数组的问题

假设我有一个masterArray[][],并希望将childArray1[]]和childArray2[]]放入其中。 我就是这样做的,我想知道这是否是正确的应用方式:

private int[][][] masterArray;
private int[][] childArray1 = {
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 0, 0, 1, 0, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
        {1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
        {1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
        {1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
        {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
        {1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
        {1, 0, 1, 1, 0, 1, 8, 1, 0, 1},
        {1, 0, 7, 1, 1, 1, 0, 1, 0, 1},
        {1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
        {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
        {1, 0, 0, 0, 0, 0, 0, 9, 0, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
private int[][] childArray2 = {
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
        {1, 1, 1, 1, 7, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 0, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 0, 0, 0, 1, 1, 1},
        {1, 1, 1, 9, 1, 1, 8, 0, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
好的,在我的init方法中,我使用这些方法将子数组设置到主数组中。我好奇的是这到底是怎么回事。我假设如下:

    masterLevel = new int[MAX_LEVELS][MAP_WIDTH][MAP_HEIGHT];
    for (int x = 0; x < MAP_WIDTH; x++) {
        for (int y = 0; y < MAP_HEIGHT; y++) {
            masterArray[currentLevel][x][y] = childArray1[x][y];
        }
    }
masterLevel=newint[MAX_LEVELS][MAP_WIDTH][MAP_HEIGHT];
对于(int x=0;x
这样行吗?
在我的应用程序中,事情不起作用,所以我选择了我不能100%确定的代码。

在Java多维数组中,数组实际上是数组的数组。所以它们甚至可以是不相交的。 在您发布的代码中,您引用了一个未定义的名为currentLevel的变量。我相信这是在一些你没有发布的代码中定义的。另外,不要忘记数组是零索引的。这个代码应该可以工作

masterArray = new int[MAX_LEVELS][MAP_WIDTH][MAP_HEIGHT];
for (int currentLevel = 0; currentLevel < MAX_LEVELS; currentLevel++) {
    for (int x = 0; x < MAP_WIDTH; x++) {
        for (int y = 0; y < MAP_HEIGHT; y++) {
                masterArray[currentLevel][x][y] = childArray1[x][y];
            }
        }
    }
masterArray=newint[MAX_LEVELS][MAP_WIDTH][MAP_HEIGHT];
对于(int currentLevel=0;currentLevel

如果您曾经使用大规模阵列并需要速度,那么您可以查看System.arrayCopy()

你如何组织一个3d阵列其实并不重要,只要你把东西放在和拿出来一样的地方就行了

从您对另一个答案的评论来看,您似乎对元素顺序有问题(
[currentLevel][x][y]=childArray[y][x];

看起来你混合了地图的高度和宽度。应该是:

masterLevel = new int[MAX_LEVELS][MAP_HEIGHT][MAP_WIDTH];
然后您可以使用:

master[currentLevel][x][y] = childArray[x][y];

currenLevel已定义,但在将子数组分配给主数组时,我不想更改currenLevel。显然,我让它工作了,但我不得不改变变量,这仍然让我困惑。ex:[currentLevel][x][y]=childArray[y][x];我懂了。。。我一直以为它会读[列][行]。
    String[]        arr1D;
    String[][]      arr2D; 
    String[][][]    arr3D; 

    arr1D = new String[] { "1", "2", "3" };

    //////////////////////////////////////////////////////////////////////////
    //assign 1D array to element of 2D array
    ////////////////////////////////////////////////////////////////////////// 
    arr2D = new String[][] {  
                                arr1D ,
                                arr1D ,
                                arr1D 
                           }; 
     /*
     //  OR
     arr2D = new String[3][];
        arr2D[0] = arr1D;
        arr2D[1] = arr1D;
        arr2D[2] = arr1D;       
    //  OR 
     arr2D = new String[][] {  
        new String[] { "1", "2", "3" } ,
        new String[] { "1", "2", "3" } ,
        new String[] { "1", "2", "3" } 
                };      

    */
    //////////////////////////////////////////////////////////////////////////
    //assign 2D array to element of 3D array
    //////////////////////////////////////////////////////////////////////////

    arr3D = new String[][][] {  
            arr2D ,
            arr2D ,
            arr2D 
          }; 
    /*
    // OR   
        arr3D = new String[3][][]; 
        arr3D[0] = arr2D;
        arr3D[1] = arr2D;
        arr3D[2] = arr2D; 
    */