计算高于平均值的值以返回另一个方法

时间:2017-11-07 16:20:43

标签: java methods average

public class main {

    public static void main(String[] args) {
        aboveAverageTester();

    }

    public static int aboveAverage(int a, int b, int c, int d, int e, int f) {
        //This method computes the average of the parameters 
        //and then returns how many of the parameters are above the average. 
        int avg = (a + b + c + d + e + f) / 6;
        int above = 0;

        if (a > avg) {
            return a;
        }else if (b > avg) {
            return b;
        }else if (c > avg) {
            return c;
        }else if (d > avg) {
            return d;
        }else if (e > avg) {
            return e;
        }else if (f > avg) {
            return f;
        }else{
            return a + b + c + e + f;
        }

    }

    public static int aboveAverageTester() {
        int aboveAverage = aboveAverage(10, 10, 10, 10, 45, 50);
        System.out.println(aboveAverage);
        return aboveAverage;
    }
}

我知道上面的平均方法逻辑可能完全关闭,但是当我试图返回有多少参数高于平均值时,我遇到了问题。

从我的代码中,我相信当你继续像a,b,c ......之类的那样返回时,它们只是一个实例,并且没有添加到其他人的列表中,而是大于平均值。

我试图在不使用此方法打印任何内容的情况下执行此操作,仅使用逻辑。

我知道,通过添加所有a,b,c,d,e,f,并且不仅仅是从它们创建列表,在上面的Avg方法的底部也搞砸了。

有谁能告诉我如何处理这个问题?

3 个答案:

答案 0 :(得分:1)

您的方法返回其中一个值,而不是计数。当总和a + b + c + d + e + f不能被6整除时,它也会截断平均值。

您可以使用double作为平均值,除以6.0以强制double结果类型,然后使用条件运算符计算高于平均数的数字来解决此问题:

double avg = (a + b + c + d + e + f) / 6.0;
return (a > avg ? 1 : 0)
     + (b > avg ? 1 : 0)
     + (c > avg ? 1 : 0)
     + (d > avg ? 1 : 0)
     + (e > avg ? 1 : 0)
     + (f > avg ? 1 : 0);

答案 1 :(得分:1)

要计算高于平均值的元素数量,您可以循环每个元素并在条件为true时递增计数器:

int aboveAverage = 0;
List<Integer> numbers = Arrays.asList(a,b,c,d,e,f);
for (int number : numbers){
   if (number > avg){
      aboveAverage++;
   } 
}
return aboveAverage;

使用Java 8,您可以用一种不那么冗长的方式编写它:

long aboveAverage = Arrays.asList(a,b,c,d,e,f).stream()
                          .filter(n-> n > avg)
                          .count();

答案 2 :(得分:0)

不确定我是否完全接受了您的问题,但我想您想要计算出多少值高于平均值。

因此,当if语句成立时,不应该返回值,而应该像这样递增计数器:

if (a > avg) {
    above++;
}