为什么在增强for循环后返回i时会出现编译错误?

时间:2016-06-26 09:53:39

标签: java

我正在学习Java而且我不明白为什么会出现错误。

public static int sum(ArrayList<Integer> list) {

    for(int i : list){
        i += i;
    }

    return i;
}

我通过制作一个新的和变量来修复错误,但我仍然想知道为什么我无法返回i。我的范围是否仅限于for循环?我想知道为什么不允许在外面使用它是有用的。

2 个答案:

答案 0 :(得分:2)

  

为什么在增强for循环后返回i时会出现编译错误?

因为i循环中声明的for仅限于for循环;您无法在for循环之外访问它。

你说你已经通过添加一个新的sum变量修复了它,所以我假设你最终得到了这样的结果:

public static int sum(ArrayList<Integer> list) {
    int sum = 0;

    for (int i : list){
        sum += i;
    }

    return sum;
}

我还建议你使用List<Integer>而不是ArrayList<Integer>

public static int sum(List<Integer> list) {
    // Here ----------^

    // ...
}

通常,代码限制性最小。

另外,循环体内i的值的修改只会被循环本身设置的下一次迭代的值覆盖。考虑:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
for (int i : list){
    System.out.println("before: " + i);
    i += i;
    System.out.println("after: " + i);
}

输出

before: 1
after: 2
before: 2
after: 4
before: 3
after: 6

注意无论你对循环体中的i做什么,它都会在下一次迭代时由循环本身设置。

答案 1 :(得分:0)

<form action=""> First name: <input type="text" required name="FirstName" value=""><br> Last name: <input type="text" name="LastName" value="Mouse"><br> <input type="submit" value="Submit"> </form> 只能在i范围内访问,这是您无法在方法中退回的原因。

警告,您还使用enhanced for loop,因为每次循环播放时都没有做任何特殊操作,i+=i代表i的另一个索引。

这是使用以下代码

的平等
ArrayList

解决方案是使用临时变量,例如public static int sum(ArrayList<Integer> list) { int counter = 0; while (counter < list.size()) { int i = list.get(counter); // You're creating a new variable at each iteration so it doesn't affect anything for the next loop. i += i; } return i; } 。检查下面的答案。

sum

另一种解决方案,如果您使用,则使用public static int sum(ArrayList<Integer> list) { int sum = 0; for(int i : list){ sum+=i; } return sum; }

IntStream#sum()