Java 如何计算代码的平均值

Java 如何计算代码的平均值,java,arrays,math,mean,Java,Arrays,Math,Mean,文件中有各种球队名称,另一个文件中有参加比赛的人数。我试图写一段代码,找出每个团队的平均出勤率 我希望它看起来像这个 public static double mean(double[] m) { double sum = 0; for (int i = 0; i < m.length; i++) { sum += m[i]; } return sum / m.length; } 公共静态双平均值(双[]m){ 双和=0; 对于(int i

文件中有各种球队名称,另一个文件中有参加比赛的人数。我试图写一段代码,找出每个团队的平均出勤率

我希望它看起来像这个

public static double mean(double[] m) {
    double sum = 0;
    for (int i = 0; i < m.length; i++) {
        sum += m[i];
    }
    return sum / m.length;
}
公共静态双平均值(双[]m){
双和=0;
对于(int i=0;i
我试着自己解决这个问题,下面是我的想法。我正试图将这两个列表合并在一起

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

    }
}
public静态字符串getAverageAttention(团队)
{
ArrayList ourList=新的ArrayList(结果);
ArrayList teamsAttendance=新的ArrayList();
对于(匹配收件人:我们的列表)
{
如果(att!=null&&att.getTeamName().equals(team.getName()))
{
团队管理。添加(附件);
}
}
浮动人群=0;
对于(比赛收件人:Teamstattenance)
{
浮动乘数=(att.getAttention()/391);
群组=群组+倍增器
}
}

我知道代码可能需要重做,我认为我没有正确使用float。正如你所看到的,我是一个新手,任何帮助都将不胜感激

您可以这样做:

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
}
public静态字符串getAverageAttention(团队){
double[]Attentenses=新的doble[result.size()];
对于(int i=0;i

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

我不再假设
结果
是一个
静态列表。有了这个假设,我相信你可以这样创建你的函数:

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::GetAttention
中的数字返回类型,更改任何适当的函数


请注意,这两个函数都遵循原始的方法签名,并返回一个
字符串
。如果您可以控制此方法,我建议返回数值
double
float
类型,并允许调用方在必要时将其转换为字符串。我还建议将
列表
对象作为参数传递给方法,而不是依赖
静态变量,因为这会使方法更具可重用性,但我不知道您的所有用例。

神奇的
391
数字是什么?在您添加所有出席人数后,是否应该执行
crowd/teamsatenance.size()
?运行代码时是否得到错误答案,或者您是否无法完成程序以获得平均值?