Java Error : cannot invoke size() on the primitive type double

Java Error : cannot invoke size() on the primitive type double

我已经学习 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

您的代码有很多冗余。

double  average, count, orig = (double) 0;

可以写成:

double average, count, orig = 0.0d;

(你应该考虑检查浮动并决定哪个更适合你 - 在这里并不重要)

从 java 1.7 开始,您可以以更短的方式声明列表(搜索 "diamond expression")。

ArrayList<Double> list = new ArrayList<>();

在行

double e = average.get(average.size() - 1);

你可能用 list 而不是平均值,这应该可以修复标题中的错误。

现在您的代码多次打印平均值,只有最后一次是列表项的真正平均值。考虑将平均值的打印命令移出 for 循环。

试试这个:

for (Double x: list)
    {
        all += x;

    }
average = all/count;
System.out.println(average);

您不能在原始数据上调用 size() 方法 type.It 可以在 java.util.List 上调用,等等。所以你的 double e = average.get(average.size() - 1); 没有意义。

可以直接写:

average = all/count;

您在循环中保留了太多代码。 当你遍历双打列表时,你只需要保持 运行 总数。之后,您应该将平均值计算为双精度总和除以列表的大小。

修复循环的方法如下:

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);