我正在学习Java而且我不明白为什么会出现错误。
public static int sum(ArrayList<Integer> list) {
for(int i : list){
i += i;
}
return i;
}
我通过制作一个新的和变量来修复错误,但我仍然想知道为什么我无法返回i。我的范围是否仅限于for循环?我想知道为什么不允许在外面使用它是有用的。
答案 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
另一种解决方案,如果您使用java-8,则使用public static int sum(ArrayList<Integer> list) {
int sum = 0;
for(int i : list){
sum+=i;
}
return sum;
}
IntStream#sum()