繁体   English   中英

我如何计算我的代码的均值

[英]how do i calculate the mean for my code

该文件有不同的球队名称,另一个文件具有比赛的出勤率。 我正在尝试编写一段代码,以查找每个团队的平均出勤率。

我希望它看起来与此类似

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

    }
}

我了解该代码可能需要重做,而且我认为我没有正确使用float。 如您所见,我是新手,我们将不胜感激。

我不认为resultsstatic List<Match> 有了这个假设,我相信您可以通过以下方式创建函数:

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<Match>对象作为参数传递给方法,而不是依赖于static变量,因为这会使方法更可重用,但是我不知道您的所有用例。

您可以执行以下操作:

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()中进行错误检查,因为传入null数组将导致它引发Exception。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM