gpt4 book ai didi

Java 对列表中的项目进行排名

转载 作者:行者123 更新时间:2023-12-01 23:16:01 28 4
gpt4 key购买 nike

我正在尝试编写看似非常基本的计算。然而,经过几次尝试后,它仍然让我感到不舒服。

有问题要解决。我有一个<List>StudentGradesStudentGrades告诉我学生是谁以及学生是什么 .finalPercentage()是。现在我希望能够确定一个学生classStanding 。如果分数如下所示:

100 99 98 98 98 97 96

那么排名应该是这样的

1 2 3 3 3 6 7

这是我尝试过的:

public final class RankingUtil{
public static Integer getClassStanding(StudentGrades studentGrades, List<StudentGrades> allStudentGrades) {
int classRank = 0;
BigDecimal lastScore = BigDecimal.ZERO;
BigDecimal secondLastScore = null;
Collections.sort(allStudentGrades, new Comparator<StudentGrades>() {
public int compare(StudentGrades o1, StudentGrades o2) {
return -o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});

for (StudentGrades sg : allStudentGrades) {
if (!lastScore.equals(sg.getGradeSheetScoreTotalAchieved()) && lastScore.equals(secondLastScore)) {
classRank++;
}

if (!lastScore.equals(sg.getGradeSheetScoreTotalAchieved())) {
classRank++;
}

secondLastScore = lastScore;
lastScore = sg.getGradeSheetScoreTotalAchieved();

if (sg.equals(studentGrades)) {
return classRank;
}
}

return null;
}
}

我确信我犯了一个简单的错误,但我遇到的问题是我最终得到了以下排名:

1 2 3 3 3 5 6

您建议如何跟踪个人应该所处的位置?

最佳答案

我不明白为什么你们有这么多本地柜台。只需对列表进行排序并找到与您给定的学生成绩匹配的第一个即可。

public static Integer getClassStanding(StudentGrade studentGrade, List<StudentGrade> allStudentGrades) {
List<StudentGrade> localList = new ArrayList<>(allStudentGrades);
Collections.sort(localList, new Comparator<StudentGrade>() {
@Override public int compare(StudentGrade first, StudentGrade second) {
return (second.getScore() <= first.getScore()) ? -1 : 1;
}
});

for (int i = 0; i < localList.size(); i++) {
if (localList.get(i).getScore() == studentGrade.getScore())
return i+1;
}
return null;
}

另请注意,我制作了列表参数的本地副本。您可能不想对方法范围之外的每个人的 StudentGrades 列表进行排序。

关于Java 对列表中的项目进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com