尝试查找数组的平均值时出现逻辑错误

时间:2018-04-26 06:25:44

标签: java

我做了一个计算数组平均值的方法。我虽然得到了奇怪的数字。当我构造一个由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;

5 个答案:

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

    }