关于此代码的两个问题。
package experimental;
import java.sql.Array;
public class foreachExp {
public int[] anArray = {1, 2, 3, 4, 5,};
public void foreachArray() {
for (int i : anArray) {
anArray[i] = i + 1;
}
}
}
答案 0 :(得分:5)
for-each不能基于数组索引工作但实现迭代解决方案,int i
变量将代表来自所提供数组的单个数据元素。所以在循环中,你有效地调用:
anArray[1] = 1 + 1;
anArray[2] = 2 + 1;
anArray[3] = 3 + 1;
anArray[4] = 4 + 1;
anArray[5] = 5 + 1;
正如您所看到的,anArray[5]
将超出范围,因为数组的长度仅为5长(0-4)
如果你想改变这些值,你不要使用for-each循环(可能使用某种类型的Box
很容易做到这一点,但是使用数组它会很愚蠢。)
所以使用数组,这将是明智的解决方案:
for (int i = 0; i < anArray.length; i++) {
anArray[i]++;
}
正如您已经提到的那样
答案 1 :(得分:2)
写作时
for (int i : anArray) {
i
指的是值本身,而不是索引。所以要求array[5]
会给你一个超出范围的异常(有效索引是0到4)。
您可以改为使用普通for循环:
for (int i=0; i<anArray.length; ++i) {
anArray[i]++;
}
答案 2 :(得分:1)
for
循环和增强for循环之间的根本区别在于增强型for循环实际上将数组的值绑定到变量本身。
所以,你的增强型for在每次迭代时都会这样做:
增强的for循环不适用于更改值。你可以使用普通的for
循环。