Java错误:无法对基元类型double调用size()

Java错误:无法对基元类型double调用size(),java,arraylist,double,size,Java,Arraylist,Double,Size,我已经学习Java大约一个星期了,我正在编写一个程序,可以计算任意数量的数字的平均值。但我遇到了一个问题,它会将每个数字除以总数,而不是除以所有值的总和。我还尝试查找数组列表的最后一个值,然后将其除以计数。但它不起作用 这是我的代码: import java.util.Scanner; import java.util.*; public class Average { public static void main (String args[]){ 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);
        }
    }
}

您的代码中有相当多的冗余

double  average, count, orig = (double) 0;
可以写为:

double average, count, orig = 0.0d;

(你应该考虑检查浮标,并决定哪一个更适合你——这里并不重要)

自Java1.7以来,您可以以更短的方式声明列表(搜索“菱形表达式”)

您可能需要修改
列表
,而不是平均值,这将修复标题中的错误

现在,您的代码平均打印多次,只有最后一次是列表项的实际平均值。考虑移动打印命令的平均值for循环。< /P> 试试这个:

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

    }
average = all/count;
System.out.println(average);
您不能对基元数据类型调用size()方法。它可以在
java.util.List
等上调用,因此您的
double e=average.get(average.size()-1)毫无意义

你可以直接写:

average = all/count;

您在循环中保留了太多的代码。 当您在double列表上迭代时,您只需要保持一个运行总数。然后,您应该将平均值计算为双倍总和除以列表大小

下面是修复循环的方法:

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

average.get(average.size()-1)
毫无意义,因为
平均值
是一个
双精度
,而不是某种
列表
为什么要强制转换(
(double)0;
)?您不应该迭代列表,将每个值添加到总和中,一旦完成,就用元素数除以它吗?你为什么要从循环内部去做呢?我不明白你想做什么。您的标题与您的问题不符。非常感谢您的快速回复,谢谢:)。但是如果我将average改为“double e=average.get(average.size()-1);”中的list,它会打印出除以计数的每个数字,但我只希望总数除以计数。然后移动行
System.out.println(average)超出for循环范围。我编辑了我的回答,我明白了。当它在里面的时候我在循环是吗?是的,在结束“}”之前的所有东西都会循环,所以你打印了所有的中间值。如果这对你有帮助,考虑选择这个答案。
for (Double x: list)
    {
        all += x;

    }
average = all/count;
System.out.println(average);
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);