我正在尝试计算数组列表的平均值。到目前为止,数字被加在一起,但是当我尝试将它们除以数组的大小时,它不起作用。
这是我的代码:
public int mean (ArrayList<Integer> number)
{
int sum = 0;
int counter = 0;
for (Integer meanInt :number)
{
sum+=meanInt;
counter++;
}
return sum / counter;
}
答案 0 :(得分:2)
return sum / counter;
如果counter
为零(如果number
为空),则可能会导致错误。你应该照顾好。
另请注意,您的签名应为double
,而不是int
。你应该明确地施展其中一方:
return (double)sum / counter;
答案 1 :(得分:1)
在Java8中,人们可以使用流和方法引用,如:
public float mean (ArrayList<Integer> number) {
if (number != null && number.size() > 0)
return (number.stream().reduce(0, Integer::sum) / (float)number.size());
else
return 0;
}
答案 2 :(得分:0)
您将返回int
,这将截断该值。
您可以使用真实类型,例如float
或double
,或更好:
return new BigDecimal(String.valueOf(sum))
.divide(new BigDecimal(String.valueOf(number.size())))
.doubleValue();
注意强>
您不需要ArrayList
大小的计数器,只需使用上述size()
方法即可。
答案 3 :(得分:0)
整数除法截断小数部分。相反,返回float
并将其中一个操作数强制转换为float
以确保正确的数学:
您还可以免除counter
:
public float mean (List<Integer> numbers) {
int sum = 0;
for (Integer number : numbers) {
sum += number;
}
return (float)sum / numbers.size();
}
还要注意使用更典型的变量名称。
答案 4 :(得分:0)
这应该有效:
public static void main(String[] args) {
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8 };
int sum = 0;
for (int number :numbers) sum += number;
System.out.printf("The sum is: %f\n", (float) sum / numbers.length);
}
答案 5 :(得分:0)
返回双倍值平均值也可以加倍
public static double mean(List<Integer> list) {
if (list == null || list.isEmpty())
return 0.0;
long sum = 0;
int n = list.size();
for (int i = 0; i < n; i++)
sum += list.get(i);
return ((double) sum) / n;
}