JAVA - 使用循环初始化锯齿状3D数组?

时间:2015-05-28 14:44:52

标签: java arrays multidimensional-array data-structures

我一直在搜索并看到有关在其他语言中初始化锯齿状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不喜欢它。

1 个答案:

答案 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数组中是数组数组的数组,你创建第一个数组,用你想要的大小的数组填充它,然后遍历新的数组并用正确大小的数组填充它们。