我想将以下传统的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循环为该元素赋值?
答案 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。然后你可以看到编译器对数组访问做了什么。