计数值高于平均值以返回到另一种方法


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

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

从我的代码中,我相信当你在每个if之后继续返回a,b,c.等时 - 它只是1个实例,而不是添加到其他列表中,我的大于平均值。

我正在尝试在不打印此方法中的任何内容的情况下进行预制,只有逻辑。

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

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

您的方法返回其中一个值,而不是计数。当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);

要计算高于平均值的元素数量,您可以循环每个元素并在条件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();

不确定我是否完全理解了您的问题,但我想您想计算有多少值高于平均值。

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

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

最新更新