【问题标题】:JAVA - Initialize Jagged 3D Array with Loops?JAVA - 用循环初始化锯齿状 3D 数组?
【发布时间】:2015-05-28 14:44:51
【问题描述】:

我四处搜索并看到了有关用其他语言而不是 Java 初始化锯齿状 3D 数组的帖子。

我需要用户输入来初始化这个锯齿状 3D 数组的大小。所以,例如

用户输入:3

意思是我想要array[3][][]。那么

用户输入: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][] 获取更多输入,等等,但 Java 不喜欢这样。

【问题讨论】:

  • 你能展示你的代码尝试吗?
  • 主要问题在于我更习惯于使用其他语言中的数据结构,这些数据结构比常规数组灵活得多。我无法弄清楚初始化这样的东西的“正确”方法。我写的内容没有使用循环,因为当我逐行尝试时,它没有按照我的设想进行初始化。
  • 这里有一个article 供您阅读。
  • 谢谢,我已阅读文档。不能一次初始化部分 3D 数组?
  • array[space0][2][]array[space0][2][1] - 这没有任何意义。那应该是什么意思?

标签: java arrays multidimensional-array data-structures


【解决方案1】:

如果我正确理解了您的问题,这应该就是您要查找的内容:

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 数组是数组的数组,您创建第一个数组,用所需大小的数组填充它,然后遍历新数组并用正确大小的数组填充它们。

【讨论】:

  • 非常感谢!我目前正在研究一种以更少的行数做到这一点的方法 :) 谢谢!
  • 没问题,我希望这不是最佳答案,因为这有点长...
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2019-06-17
  • 2016-08-31
  • 2014-05-03
相关资源
最近更新 更多