我一直在搜索并看到有关在其他语言中初始化锯齿状3D数组的帖子,但不是在Java中。
我需要用户输入来初始化这个锯齿状3D阵列的大小。所以,例如
UserInput :3
意思是我想要array[3][][]
。然后
UserInput :2,1,2
意思是array[space0][2][]
,array[space1][1][]
,array[space2][2][]
数组中的最终和第三个[ ]
被初始化为与下一个空格的前一个相同的大小。我可能说得非常糟糕。例如,
array[space0][2][]
为array[space0][2][1]
,array[space1][1][]
为array[space1][1][2]
我希望我已经解释得那么好。
我的问题是我对Java作为编程语言的了解,并弄清楚如何正确地初始化东西。
我可以轻松地获取用户输入X,然后转到array[X][][]
,然后为array[X][w,x,y][]
等获取更多X输入,但Java不喜欢它。
答案 0 :(得分:2)
如果我理解你的问题,这应该是你想要的:
int xSize = 3;//
int[] ySizes = {1, 2, 3};// sizes for y
int[] zSizes = {1, 2, 3, 5, 6, 7};
// [ ] [ ] [ ]
int[][][] array3d = new int[xSize][][];// pre-initialize x
for (int x = 0; x < array3d.length; x++)
array3d[x] = new int[ySizes[x]][];// set the sizes of y
int pos = 0;
for (int x = 0; x < array3d.length; x++)
for (int y = 0; y < array3d[x].length; y++)
array3d[x][y] = new int[zSizes[pos++]];// set the sizes of z
// fill the array with some test values
for (int x = 0; x < array3d.length; x++)
for (int y = 0; y < array3d[x].length; y++)
for (int z = 0; z < array3d[x][y].length; z++)
array3d[x][y][z] = x * y * z;
// print the array
System.out.println(
Arrays.deepToString(array3d)
.replace("],", "],\n ")
.replace("]],", "]],\n"));
// the call to replace just improves readability
这个想法是因为在java 3d数组中是数组数组的数组,你创建第一个数组,用你想要的大小的数组填充它,然后遍历新的数组并用正确大小的数组填充它们。