使用foreach循环输入2D数组

时间:2017-10-02 13:55:36

标签: java arrays for-loop foreach

我想将以下传统的for循环转换为foreach循环:

for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
        arr[i][j]=sc.nextInt();

我的尝试是:

for(int[] innerArr: arr)
    for(int ele: innerArr)
        ele = sc.nextInt();

这不起作用。我认为,因为innerArr表示数组的一行,而ele表示该行中的单个元素,所以上面的代码可以工作。但我想只有arr[i][j]中该元素的现有值才会复制到ele中。是否可以使用foreach循环为该元素赋值?

2 个答案:

答案 0 :(得分:6)

不,这是不可能的。增强的for循环为您提供了迭代的数组元素(或Iterable的元素)的副本,因此为它们赋值不会更改原始数组(或Iterable)。 / p>

增强的for循环尝试等同于:

for(int i = 0; i < arr.length; i++) {
    int[] innerArr = arr[i];
    for(int j = 0; j < innerArr.length; j++) {
        int ele = innerArr[j];
        ele = sc.nextInt();
    }
}

在这种情况下你应该坚持传统的for循环。

答案 1 :(得分:3)

如果要写入元素,内部循环不能是增强的for循环。你能做的是:

for(int[] innerArr : arr) {
  for(int i = 0; i < innerArr.length; i++) {
    innerArr[i] = scanner.nextInt();
  }
}

看看is not a thing you can do。然后你可以看到编译器对数组访问做了什么。