如何使用for循环更改数组中的值

时间:2014-06-07 03:56:02

标签: java for-loop

关于此代码的两个问题。

  1. 如何遍历数组并实际更改数组中的值。
  2. 为什么foreach不断给我一个超出范围的例外。它适用于通常的循环(int i = 0; i< anArray.length; i ++),但我之前没有使用过这个foreach?
  3. 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;
            }
        }
    }
    

3 个答案:

答案 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在每次迭代时都会这样做:

  • i = 1
  • i = 2
  • i = 3
  • i = 4
  • i = 5 //这是你的数组的大小

增强的for循环不适用于更改值。你可以使用普通的for循环。