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方法的底部也搞砸了。
有谁能告诉我如何处理这个问题?
答案 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++;
}