为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅从数组列表中计算平均值“计算正数而忽略负数)?

如何仅从数组列表中计算平均值“计算正数而忽略负数)?

交互式爱情 2022-09-07 17:48:42
我正在尝试从数组列表中计算正平均值。它从数组列表中获取值,但仅计算“正”数字,同时进行测试Integer[] array = new Integer[]{3, 2, -4, -7}; ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(array));System.out.printf(averagePositive(arrayList));我尝试过使用腹肌,但它不起作用。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 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

您应该计算正数并除以该计数,而不是除以: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;

}


查看完整回答
反对 回复 2022-09-07
?
倚天杖

TA贡献1828条经验 获得超3个赞

Your 等于数组的大小。相反,它应该是总正数的计数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;

}


查看完整回答
反对 回复 2022-09-07
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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


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;

}


查看完整回答
反对 回复 2022-09-07
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您的代码几乎是正确的。你唯一缺少的部分是你想取正元素的平均值,所以在你的情况下,元素的总量应该是2。您应该只计算正元素,如下所示:


int n = 0;


for (int i = 0; i < n  ; i++)

   if (values.get(i) > 0.0) {

       sum += values.get(i);

       n++;

}

这应该可以解决问题。


查看完整回答
反对 回复 2022-09-07
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

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


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

}


查看完整回答
反对 回复 2022-09-07
  • 5 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信