我做了一个计算数组平均值的方法。我虽然得到了奇怪的数字。当我构造一个由1,9,5,0,7组成的数组时,它表示平均值为3,它应该是5,但我看不出我的方法有什么问题。
public static int Average(Array_one A) {
int ave = 0;
int[] a = A.values;
for (int i = 0; i < A.size; i++) {
double tmp = a[i] * 1.0;
ave += (tmp / A.size);
}
return ave;
答案 0 :(得分:1)
您必须首先找到sum
,然后按元素金额除以。不要失去精确度。
public static double avg(int[] arr) {
int sum = 0;
for (int val : arr)
sum += val;
return (double)sum / arr.length;
}
答案 1 :(得分:1)
通过使用以下代码,平均值不是5。
import java.io.*;
public class Test {
public static void main(String args[]) {
double ave = 0;
int[] a = {1, 9, 5, 0, 7};
double tmp = 0;
for (int i = 0; i < a.length; i++) {
tmp += a[i];
}
ave += (tmp / a.length);
System.out.println(ave);
}
}
答案 2 :(得分:1)
你只需要在for循环之外拉出除法,这样你就可以添加数组中的所有数字,然后除以总数
public static int Average(Array_one A) {
int ave = 0;
int[] a = A.values;
for (int i = 0; i < A.size; i++) {
double tmp = a[i] * 1.0;
ave += tmp;
}
ave = ave/A.size;
return ave;
答案 3 :(得分:0)
问题似乎出现在你的数学中:
您正在添加1/6 + 9/6 + 5/6 + 0/6 + 7/6。
哪个出现在22/6。除非您将ave声明为int,否则您的程序会丢弃剩余的并导致各种数学问题。
您应该将平均值声明为双倍优先。 然后,您应该将所有数字加到tmp 中而不分割。
之后,将tmp除以ave,你应该得到正确的结果。
答案 4 :(得分:-2)
为什么不使用流?
public static void main(String[] args) {
int[] arr = {1,9,5,0,7};
double average = Arrays.stream(arr)
.average()
.orElse(-1);
System.out.println(String.format("Average: %s", average));
}