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