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]
对 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]