2015-05-28 37 views
2

我已经搜索了四周,看到有关初始化锯齿状3D数组在其他语言但不是在Java中的帖子。JAVA - 用循环初始化锯齿状3D阵列?

我需要用户输入来初始化此锯齿状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不喜欢这样。

+2

你可以显示你的代码尝试? – MaxZoom

+0

主要的问题在于我更习惯于使用比常规数组更灵活的其他语言的数据结构。我无法弄清楚这种初始化的“正确”方法。我写的没有使用循环,因为当我逐行尝试时,它并未初始化我设想的方式。 – jonbon

+0

这是一篇[文章](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html)供您阅读。 – MaxZoom

回答

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

+0

我真的很感激它!我目前正在努力以更少的行数来完成此操作:)谢谢! – jonbon

+0

没问题,我有点希望这不是最好的答案,因为这有点长... –