我一直在学习Java大约一个星期,我正在开发一个程序,可以找到任意数量的平均值。但是我遇到了一个问题,它将每个数字除以总数,而不是除以所有值的总和。我也尝试找到数组列表的最后一个值,然后除以计数。但它没有用。
这是我的代码:
import java.util.Scanner;
import java.util.*;
public class Average {
public static void main (String args[]){
double average, count, orig = (double) 0;
double all =(double) 0;
Scanner input = new Scanner (System.in);
ArrayList<Double> list = new ArrayList<Double>();
while (input.hasNextDouble()) list.add(input.nextDouble());
count = (double) list.size();
for (Double x: list) {
all += x;
average = all/count;
System.out.println(average);
double e = average.get(average.size() - 1);
System.out.println(e);
}
}
}
,输出为:
21
20
23
24
25
a
4.2
8.2
12.8
17.6
22.6
25.0
答案 0 :(得分:1)
你的代码有很多冗余。
double average, count, orig = (double) 0;
可以写成:
double average, count, orig = 0.0d;
(你应该考虑检查浮动并决定哪种更适合你 - 这在这里并不重要)
从java 1.7开始,您可以用更短的方式声明列表(搜索“钻石表达式”)。
ArrayList<Double> list = new ArrayList<>();
在第
行double e = average.get(average.size() - 1);
你可能会list
而不是平均值,这应该可以解决标题中的错误。
现在您的代码是多次打印平均值,只有最后一次是列表项的实际平均值。考虑移动平均的打印命令for for循环。
试试这个:
for (Double x: list)
{
all += x;
}
average = all/count;
System.out.println(average);
答案 1 :(得分:1)
你不能在原始数据类型上调用size()方法。它可以在java.util.List
等上调用。所以你的double e = average.get(average.size() - 1);
毫无意义。
你可以直接写:
average = all/count;
答案 2 :(得分:0)
你在循环中保留了太多代码。 当您遍历双打列表时,您只需要保持运行总计。然后,您应该将平均值计算为双精度之和除以列表的大小。
以下是修复循环的方法:
for (Double x: list)
{
all += x;
}
average = all/count;
System.out.println(average);
//These lines are not useful, so they are commented out.
//double e = average.get(average.size() - 1);
// System.out.println(e);