对于使用2Darrays的每个循环
这是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[]
作为类型,因此声明。 如果你在另一个内循环中遍历你的u
,你会得到int
类型: –
for (int[] u: uu) { for (int elem: u) { // Your individual element } }
这是因为uu
是一个int[]
数组的数组。 所以其中的每一项都是int[]
。 在for
循环中,您声明迭代的数组中项的类型。
循环迭代uu
的元素,它们是int[]
类型的对象。 (换句话说 – u
是uu
的元素,因此它是int[]
)。
声明始终是迭代检索的对象的类型 – 在这种情况下 – 它是int[]
–
与迭代int[]
是:
for (int x : myArray) { ...}
因为x
每个元素都是int
类型。
“为什么for循环的声明部分声明为int [] u,而不是int [] [] u?”
该数组是二维的,因此您正在处理双层迭代。 你有一个“内部”数组,其原理与List
相同。 >
要遍历所有元素,您应该考虑行元素结构。 您必须从容器中获取每一行,然后从每行获取每个元素。
for(int[] u: uu)
只是for-each迭代行,其原理与for(int row = 0; row < container.length; row++)
,而u
或者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]); } }