这是Java代码片段:
int[][] uu = new int[1][1];
uu[0][0] = 5;
for(int[] u: uu){
System.out.println(u[0]);
}
它打印 5。但是为什么声明了 for 循环的声明部分as int[] u
,但没有声明as int[][] u
?
在 uu 中,您引用 2D 数组...这不是功课。我正在准备 Java 认证。干杯
因为你uu
是一个array of array
. 因此,当您迭代它时,您将首先获得一个array
,然后您可以迭代该数组以获取单个元素。
因此,您的外部循环具有int[]
as 类型,因此具有该声明。如果您u
在另一个内部循环中迭代,您将获得类型int
:-
for (int[] u: uu) {
for (int elem: u) {
// Your individual element
}
}
这是因为uu
是一个数组int[]
数组。所以里面的每一项都是int[]
。在for
循环中,您声明您迭代的数组中项目的类型。
循环在 的元素上进行迭代,这些元素是uu
类型的对象int[]
。(或者换句话说 -u
是 中的一个元素uu
,因此它是一个int[]
)。
声明始终是迭代检索到的对象的类型 - 在这种情况下 - 它是int[]
-
与迭代 an 相同的int[]
是:
for (int x : myArray) { ...}
因为 的每个元素x
都是 type int
。
“为什么for循环的声明部分被声明为int [] u,而不是int [] [] u?”
该数组是二维的,因此您正在处理双层迭代。您在另一个“内部”有一个数组,其原理与List<List<Integer>>
工作原理相同。
要遍历所有元素,您应该考虑行元素结构。有必要从容器中获取每一行,然后从每一行中获取每个元素。
for(int[] u: uu)
只是一个for-each 迭代rows,具有相同的原理for(int row = 0; row < container.length; row++)
,and u
or 分别container[row]
不是元素本身,而是元素的行(数组)。这意味着您需要第二个迭代层来获取元素:
int[][] container = new int[10][10];
//... - Fill elements.
for(int row = 0; row < container.length; row++){
for(int element = 0; element < container[row].length; element++){
System.out.printf("Row: %d Element: %d Value: %d\n", row, element, container[row][element]);
}
}