繁体   English   中英

对于使用二维数组的每个循环

[英]For each loop using 2D array

这是 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[]类型的对象。 (换句话说 - uuu的元素,因此它是int[] )。

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

与迭代int[]是:

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

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

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

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

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

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]);
  }
}

这是在二维数组中查找总和并打印它的示例

public class Array2DForEach {
    public static void main(String[] args) {
        int sum = 0;
        int[][] myFirst2DArray = {
                                    { 3, 5, 1, 9 },
                                    { 10, 15, 3, 0  },
                                    { 1, 11, 31, 90 },
                                    { 2, 51, 1, 9 }
                                };

        for (int[] row:myFirst2DArray) {

            for (int columnElement : row) {
                sum+=columnElement;
            }
            
        }
        System.out.println(sum);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM