14

这是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 认证。干杯

4

4 回答 4

33

因为你uu是一个array of array. 因此,当您迭代它时,您将首先获得一个array,然后您可以迭代该数组以获取单个元素。

因此,您的外部循环具有int[]as 类型,因此具有该声明。如果您u在另一个内部循环中迭代,您将获得类型int:-

for (int[] u: uu) {
    for (int elem: u) {
        // Your individual element
    }
}
于 2012-11-14T17:11:53.010 回答
4

这是因为uu是一个数组int[]数组。所以里面的每一项都是int[]。在for循环中,您声明您迭代的数组中项目的类型。

于 2012-11-14T17:11:48.273 回答
2

循环在 的元素上进行迭代,这些元素是uu类型的对象int[]。(或者换句话说 -u是 中的一个元素uu,因此它是一个int[])。

声明始终是迭代检索到的对象的类型 - 在这种情况下 - 它是int[]-

与迭代 an 相同的int[]是:

 for (int x : myArray) { ...}

因为 的每个元素x都是 type int

于 2012-11-14T17:11:38.270 回答
0

“为什么for循环的声明部分被声明为int [] u,而不是int [] [] u?”

该数组是二维的,因此您正在处理双层迭代。您在另一个“内部”有一个数组,其原理与List<List<Integer>>工作原理相同。

要遍历所有元素,您应该考虑行元素结构。有必要从容器中获取每一行,然后从每一行中获取每个元素。

for(int[] u: uu)只是一个for-each 迭代rows,具有相同的原理for(int row = 0; row < container.length; row++),and uor 分别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]);
  }
}
于 2012-11-14T17:42:11.390 回答