繁体   English   中英

JAVA 中具有不同数量元素的 3D 数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM