Android java将2d数组分配给3d数组
我在尝试将2d数组指定给3d数组时遇到问题,所以我想问一个关于3d和2d数组的问题 假设我有一个masterArray[][],并希望将childArray1[]]和childArray2[]]放入其中。 我就是这样做的,我想知道这是否是正确的应用方式: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
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;
*/