Java 以数组为元素的 3D 数组

Java 3D array with array as elements

对 Java 很陌生,所以不确定如何创建一个以 for-loop 数组作为其元素的 3D 数组:

public class Test {
    public static void main(String[] args) {
        int ASize = 20;
        int[][] loc = new int[5][5];
        for(int size = 0,xy = ASize/2; size < 5; size ++,xy += ASize) {
            for(int size2 = 0,xy2 = ASize/2; size2 < 5; size2 ++,xy2 += ASize) {
                loc[size][size2] = xy;
            }
            
        }

    }
}

正在尝试使用 [xy,xy2] 形式的元素数组创建 3D 数组,但无法找出正确的表达方式。假设变量 xy 和 xy2 都随着 for 循环递增 ASize 20,初始值为 ASize/2。预期的输出数组应该是:

[10,10] [30,10] [50,10] [70,10] [90,10]
[10,30] [30,30] [50,30] [70,30] [90,30]
[10,50] [30,50] [50,50] [70,50] [90,50]
[10,70] [30,70] [50,70] [70,70] [90,70]
[10,90] [30,90] [50,90] [70,90] [90,90]

那么为了创建这种具有递增元素数组的 3D 数组,编写 for 循环的正确方法是什么?

这是一种方法。它是一个“3D”数组。对于 [R][C][Other]

的数组
  • 第一层R是行数
  • 第二个是C列数。
  • 第三个是每个 [r][c] 单元格中数组的大小。
int ASize = 20;
int[][][] loc = new int[5][5][2];
for (int size = 0, xy = ASize / 2; size < 5;
        size++, xy += ASize) {
    for (int size2 = 0, xy2 = ASize / 2; size2 < 5;
            size2++, xy2 += ASize) {
        loc[size][size2][0] = xy2;
        loc[size][size2][1] = xy;
    }
    
}
for (int[][] arr : loc) {
    System.out.println(Arrays.deepToString(arr));
}

版画

[[10, 10], [30, 10], [50, 10], [70, 10], [90, 10]]
[[10, 30], [30, 30], [50, 30], [70, 30], [90, 30]]
[[10, 50], [30, 50], [50, 50], [70, 50], [90, 50]]
[[10, 70], [30, 70], [50, 70], [70, 70], [90, 70]]
[[10, 90], [30, 90], [50, 90], [70, 90], [90, 90]]

打印如下。

  • Java 中的多个维度实际上是数组的数组。
  • 所以循环遍历每一行(这是一个 [5][2] 数组)并使用 Arrays.deepToString()
  • 打印每一行
  • Arrays.toString()通常用于打印数组,但只打印第一层。

在定义嵌套数组时,您必须为每一层嵌套使用一对方括号 []。对于“3d”数组,它将是 [][][].

请注意 Java 中实际上没有“2d”或“3d”数组。我们可以创建一个嵌套数组,即一个包含其他数组的数组。

创建嵌套数组时,只需提供外部(封闭)数组的长度。您可以省略声明内部数组的大小,这在内部数组的长度可能不同时很有用。

即此声明也将有效:

int[][][] loc = new int[5][][];

关于数组的另一件重要事情是您需要注意的是,尽管它们是对象并继承了 Object class 的所有行为,但数组没有自己的 class es。因此,如果您在数组上调用 toString()hasCode()equals(),将调用 Object class 的默认实现。因此,尝试打印数组将导致控制台上出现奇怪的符号。

因此,如果您的朋友需要打印或比较数组,Arrays 实用程序 class。

public static void main(String[] args) {

    int[][][] loc = new int[5][5][2];
    
    for (int row = 0; row < loc.length; row++) {
        for (int col = 0; col < loc[row].length; col++) {
            loc[row][col][0] = (1 + 2 * row) * 10;
            loc[row][col][1] = (1 + 2 * col) * 10;
        }
    }    

    print3DArray(loc);
}

public static void print3DArray(int[][][] arr) {
    for (int row = 0; row < arr.length; row++) {
        for (int col = 0; col < arr[row].length; col++) {
            System.out.print(Arrays.toString(arr[row][col]) + " ");
        }
        System.out.println();
    }
}

输出:

[10, 10] [10, 30] [10, 50] [10, 70] [10, 90] 
[30, 10] [30, 30] [30, 50] [30, 70] [30, 90] 
[50, 10] [50, 30] [50, 50] [50, 70] [50, 90] 
[70, 10] [70, 30] [70, 50] [70, 70] [70, 90] 
[90, 10] [90, 30] [90, 50] [90, 70] [90, 90]