【问题标题】:how do i calculate the mean for my code我如何计算我的代码的平均值
【发布时间】:2015-11-15 21:04:27
【问题描述】:

该文件有不同的球队名称,另一个文件有参加比赛的人数。我正在尝试编写一段代码来计算每个团队的平均出勤率。

我希望它看起来像这样

public static double mean(double[] m) {
    double sum = 0;
    for (int i = 0; i < m.length; i++) {
        sum += m[i];
    }
    return sum / m.length;
}

我试图自己解决这个问题,这就是我想出的。我正在尝试将两个列表组合在一起。

public static String getAverageAttendance(Team team)
{
    ArrayList<Match> ourList = new ArrayList(results);



    ArrayList<Match> teamsAttendance = new ArrayList<Match>();
    for (Match att : ourList)
    {
        if (att != null && att.getTeamName().equals(team.getName()))
        {
            teamsAttendance.add(att);
        }
    }



    float crowd = 0;
    for (Match att : teamsAttendance)
    {
     float multiplier = (att.getAttendance()/391);
     crowd = crowd + multiplier

    }
}

我知道代码可能需要重做,但我认为我没有正确使用浮点数。如您所见,我是新手,我们将不胜感激。

【问题讨论】:

  • 391 的神奇号码有什么用?把所有出勤率加起来后,你不应该执行crowd / teamsAttendance.size()吗?
  • 您在运行代码时是否得到错误的答案,或者您无法完成程序以获得平均值?

标签: java arrays math mean


【解决方案1】:

我不假设resultsstatic List&lt;Match&gt;。有了这个假设,我相信你可以这样创建你的函数:

public static String getAverageAttendance(Team team) {
    double totalCrowds = 0.0;
    int totalMatches = 0;
    for (Match match : results) {
        if (match.getTeamName().equals(team.getName())) {
            totalCrowds += match.getAttendance();
            totalMatches++;
        }
    }
    double averageAttendance = totalMatches > 0 ? totalCrowds / totalMatches : 0.0;
    return String.valueOf(averageAttendance);
}

这消除了创建额外列表的需要,并且只迭代匹配一次。我选择了double,但如果您喜欢这种类型,也可以轻松使用float

如果您使用的是 Java 8 并想使用流:

public static String getAverageAttendance(Team team) {
    return String.valueOf(results
            .stream()
            .filter(m -> m.getTeamName().equals(team.getName()))
            .collect(Collectors.averagingDouble(Match::getAttendance)));
}

您可能需要将averagingDouble 更改为averagingInt 或任何适当的函数,具体取决于您从Match::getAttendance 返回的数字类型。

请注意,这两个函数都遵循您的原始方法签名并返回String。如果您可以控制此方法,我建议返回数字 doublefloat 类型,并允许调用者在必要时将其转换为 String。我还建议将 List&lt;Match&gt; 对象作为参数传递给该方法,而不是依赖于 static 变量,因为这会使该方法更可重用,但我不知道您的所有用例。

【讨论】:

    【解决方案2】:

    你可以这样做:

    public static String getAverageAttendance(Team team) {
    
        double[] attendences = new doble[result.size()];
        for (int i = 0; i < result.size(); i++) {
            Match att = results.get(i);
            if (att != null && att.getTeamName().equals(team.getName())){
                attendences[i] = getAdjustedAttendence(att);
            }
        }
    
        return mean(attendences);
    }
    
    public double getAdjustedAttendence(Match match) {
        //whatever you do to adjust the numbers
    }
    

    不要忘记在mean()中进行错误检查,因为传入一个空数组会导致它抛出一个异常。

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 2021-03-12
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2022-06-28
      • 2022-11-12
      相关资源
      最近更新 更多