Java错误:无法在基本类型double

时间:2015-07-03 07:49:49

标签: java arraylist double size

我一直在学习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

3 个答案:

答案 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);
相关问题