[英]3D arrays in JAVA with different number of elements
如果我想从用户那里获取元素数量,如何制作这种数组(每个父数组中的元素数量不同):
int[][][] test = {
{
{0, 0, 0},
{0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}
};
您所描述的称为锯齿状数组,该数组的元素是长度不等的数组。 您可以提示用户输入,然后使用这些输入来初始化您的锯齿状数组:
int size;
int myArray[][][];
Scanner s = new Scanner();
// Initialize outer array
System.out.println("How many elements in myArray?");
size = s.nextInt();
myArray = new int[size][][];
// Initialize each inner array
for (int i = 0; i < myArray.length; i++) {
System.out.println("How many elements in myArray[" + i + "]?");
size = s.nextInt();
myArray[i] = new int[size][];
// For each inner array, initialize each inner inner array
for (int j = 0; j < myArray[i].length; j++) {
System.out.println("How many elements in myArray[" + i + "][" + j + "]?");
size = s.nextInt();
myArray[i][j] = new int[size];
}
}
你很幸运。 Java 根本没有 2D 或 3D 数组。 它只有数组数组。 您粘贴的代码片段只是工作中的语法糖。
因此:
int[][] chessboard = new int[8][];
int row0 = new int[8];
chessboard[0] = row0;
int[][]
只是一个一维数组,其中数组中的每个元素本身都是一个int[]
。 看看上面,我们如何创建一个一维 int 数组并将其分配给chessboard
变量的0
槽,从而证明chessboard
是一维的。
忘记语法糖并按上述方式制作数组,然后您就可以完全控制并且可以使每个“内部”数组成为您想要的任何大小。 唯一奇怪的是如何初始化它们。 new int[8][]
是非语法糖版本:这使得 int 数组的一维数组有 8 个int[]
,并且像所有普通的数组初始化一样,以 8 个空指针开始,与例如String[] x = new String[8]
完全相同String[] x = new String[8]
,它不生成字符串,之后例如x[0]
将为null
。
然后您可以随意调用chessboard[0] = new int[8]
等。
Java的二维数组是数组的数组。 当你在Java中创建一个二维数组时,它实际上是几个一维数组的集合。 例如, // 将其读作创建八个一维数组,每个数组具有四个元素的固定大小。 int[] [] array = new int[8][4] // 您可以将其理解为创建八个一维数组,每个数组具有未指定数量的元素。 int[] [] 数组 = 新的 int[8][]
同样,3-D 数组由一组 2-D 数组组成。
// You can read it as 3-D array consisting of 2 rows of 2-D arrays with unspecified number of levels
int[][][] array = new int[3][2][];
// Iterating through the 3-D array
for (int[][] array2D: array) {
for (int[] array1D: array2D) {
for(int element: array1D) {
System.out.println(element);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.