对于使用2D阵列的每个循环

时间:2012-11-14 17:09:57

标签: java arrays foreach

这是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 个答案:

答案 0 :(得分:21)

由于您的uuarray of array。因此,当您迭代它时,您将首先获得array,然后您可以迭代该数组以获取单个元素。

所以,你的外部循环有int[]作为类型,因此声明。如果您在另一个内循环中遍历u,则会得到类型int: -

for (int[] u: uu) {
    for (int elem: u) {
        // Your individual element
    }
}

答案 1 :(得分:3)

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

答案 2 :(得分:2)

循环正在迭代uu的元素,它们是int[]类型的对象。 (或换句话说 - uuu中的元素,因此它是int[]

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

int[]上的迭代相同:

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

因为x的每个元素都是int类型。

答案 3 :(得分:0)

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

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

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

for(int[] u: uu)只是for-each迭代行,具有相同的for(int row = 0; row < container.length; row++)原则,ucontainer[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]);
  }
}