【问题标题】:Counting values above the average for returning to another method计数高于平均值的值以返回另一个方法
【发布时间】:2017-11-07 16:20:42
【问题描述】:
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;
    }
}

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

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

我正在尝试执行此操作,而不用这种方法打印任何内容,只打印逻辑。

我知道我在 aboveAvg 方法的底部添加了所有的 a、b、c、d、e、f 而不仅仅是从它们创建一个列表。

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

【问题讨论】:

  • 事实上,这不会(如评论所说)返回“有多少参数高于平均水平”,而是“第一个高于平均水平的参数,或者如果没有则总和”。使用那个漂亮的above = 0 变量并为每个高于平均水平的变量添加+1,最后返回。哦,别忘了 if (...) ... else 分支中的 else 分支在条件为 false 时被调用,所以如果 a>avg 则永远不会检查其他条件。
  • 您是否尝试过“从他们创建列表”?

标签: java methods average


【解决方案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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多