基本上,我有这个for循环,该循环应该遍历arraylist中的所有元素,并将它们添加到名为average的变量中。
for(int i : numbers) {average += numbers.get(i - 1); }
但是当我运行它时,它返回的值比此for循环大
for(int i = 0; i < numbers.size(); i++)
average += numbers.get(i)
真正有趣的是,似乎只使用从下面链接的文件中读取的这组数字来执行此操作,否则似乎返回了另一个循环的相同值。但是需要注意的是,在两次试验中,将文件读取和存储到arraylist中的操作仍然相同。任何帮助表示赞赏。
答案 0 :(得分:2)
在您的第二个for
循环中,i
是列表中的索引,因此可以使用numbers.get
方法来查找列表中该索引处的值。
在第一个for
循环中,i
是列表中的值,而不是索引;所以等效的行为是直接将其添加:
for(int i : numbers) {
average += i;
}
我建议为索引变量保留名称i
以避免混淆;对于这种循环,请使用其他名称,在该循环中您可以遍历值而不是索引。
答案 1 :(得分:0)
您的代码应该是这样的。您正在尝试添加到索引中。
for(int i: numbers) {
sum += i;
}
average = (double) sum/l.size();
答案 2 :(得分:0)
在增强的for循环中,我们不应基于索引获取值。只需从变量获取值即可。
错误
Example
正确的方式
for(int i : numbers) {average += numbers.get(i - 1); }
答案 3 :(得分:0)
您的第一个for循环int i
从数组numbers
获取每个值,您无法控制索引,并且从0开始递增直到最大数组大小
示例:您的numbers
包含[8,2,4]
通过写作:
for (int value : numbers) {
average += value; // 1. average = 8
// 2. average = 10
// 3. average = 14
}
除非您真的想使用这种现代的for循环获取索引,否则必须显式指定它,但这是没有意义的工作。
int i = 0;
for (int value : numbers) {
average += numbers.get(i);
// do lots of other calculation using index i
i++;
}