该文件有各种团队名称,另一个文件有比赛参加人数。我正在尝试编写一段代码,找出每个团队的平均出勤率。
我希望它看起来与此相似
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
}
}
我明白代码可能需要重做,我不认为我正确地使用了浮点数。如你所见,我是一个新手,任何帮助将受到高度赞赏。
答案 0 :(得分:1)
我假设results
是static 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
。如果您可以控制此方法,我建议您返回数字double
或float
类型,并允许调用者在必要时将其转换为String。我还建议将List<Match>
对象作为参数传递给方法,而不是依赖于static
变量,因为这会使方法更具可重用性,但我不知道你的所有用例。
答案 1 :(得分:0)
你可以这样做:
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数组会导致它抛出异常。