如何仅根据数组列表“计算正数而忽略负数”来计算平均值?

时间:2019-03-28 13:42:41

标签: java arraylist

我正在尝试从arraylist计算正平均值。它从数组列表中获取值,但仅在测试时计算“正”数

Integer[] array = new Integer[]{3, 2, -4, -7}; 
ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(array));
System.out.printf(averagePositive(arrayList));

我已经尝试过使用Abs,但是没有用。

public static double averagePositive(ArrayList<Integer> values) {
    if (values == null || values.isEmpty())
       return 0.0;

    int sum = 0;
    int n = values.size();

    for (int i = 0; i < n  ; i++)
       if (values.get(i) > 0.0) {
           sum += values.get(i);
    }

    return ((double) sum) / n;
}

我想要的输出是2.50但得到1.25

5 个答案:

答案 0 :(得分:2)

您应该算出正数,然后除以该数,而不是除以n

int count = 0;
for (int i = 0; i < n  ; i++) {
    if (values.get(i) > 0.0) {
        sum += values.get(i);
        count++;
    }
}
if (count > 0) {
    return ((double) sum) / count;
} else {
    return 0;
}

答案 1 :(得分:1)

您的n等于数组的大小。相反,它应该是总数的正数

public static void main(String[] args) {
    Integer[] array = new Integer[] { 3, 2, -4, -7 };
    ArrayList arrayList = new ArrayList(Arrays.asList(array));
    System.out.println(averagePositive(arrayList));
}

public static double averagePositive(ArrayList<Integer> values) {
    if (values == null || values.isEmpty())
        return 0.0;

    int sum = 0;
    int n = 0;

    for (int i = 0; i < values.size(); i++)
        if (values.get(i) > 0.0) {
            sum += values.get(i);
            n++;
        }

    return ((double) sum) / n;
}

答案 2 :(得分:0)

您的代码几乎正确。您唯一缺少的部分是要平均取正元素,因此您的情况下元素总数应为2。您应该只计算积极因素,例如:

int n = 0;

for (int i = 0; i < n  ; i++)
   if (values.get(i) > 0.0) {
       sum += values.get(i);
       n++;
}

这应该可以解决问题。

答案 3 :(得分:0)

您需要将总和除以正数,而不是总大小。

public static double averagePositive(ArrayList<Integer> values) {
if (values == null || values.isEmpty())
   return 0.0;

int sum = 0;
int positive_n = 0;

for (int i = 0; i < n  ; i++)
   if (values.get(i) > 0.0) {
       sum += values.get(i);
         positive_n++;
}

return ((double) sum) / positive_n;
}

答案 4 :(得分:0)

您应该算出您拥有多少个正值,而不是除以列表大小:

int positiveCount = 0;
for (int i = 0; i < n  ; i++)
       if (values.get(i) > 0.0) {
           sum += values.get(i);
           positiveCount++;
}

return ((double) sum) / positiveCount;

或者您可以使用流:

public static double averagePositive(List<Integer> values) {
    return values.stream()
                 .filter(d -> d > 0.0)
                 .mapToDouble(Function.identity())
                 .average().orElse(0.0);
}