Java对列表中的项目进行排名
我试图写一个看起来很基本的计算。然而,经过几次尝试,它仍然踢我的屁股 要解决的问题。我有一个Java对列表中的项目进行排名,java,list,sorting,Java,List,Sorting,我试图写一个看起来很基本的计算。然而,经过几次尝试,它仍然踢我的屁股 要解决的问题。我有一个StudentGradesStudentGrades告诉我学生是谁以及学生是什么。现在我想能够确定一个学生的班级排名。如果分数如下所示: 1009998989796 那么排名应该是这样的 123367 这就是我尝试过的: public final class RankingUtil{ public static Integer getClassStanding(StudentGrades studen
StudentGrades
StudentGrades
告诉我学生是谁以及学生是什么。现在我想能够确定一个学生的班级排名
。如果分数如下所示:
1009998989796
那么排名应该是这样的
123367
这就是我尝试过的:
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;
}
}
公共最终类RankingUtil{
公共静态整数getClassStanding(StudentGrades StudentGrades,列出所有StudentGrades){
int classRank=0;
BigDecimal lastScore=BigDecimal.0;
BigDecimal secondLastScore=null;
Collections.sort(allStudentGrades,newcomparator(){
公共整数比较(学生等级o1,学生等级o2){
return-o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});
适用于(学生成绩sg:所有学生成绩){
如果(!lastScore.equals(sg.getGradeSheetScoreTotalAcquired())和&lastScore.equals(secondLastScore)){
classRank++;
}
如果(!lastScore.equals(sg.getGradeSheetScoreTotalAcquired())){
classRank++;
}
secondLastScore=lastScore;
lastScore=sg.getGradeSheetScoreTotalAcquired();
如果(sg.等于(学生成绩)){
返回classRank;
}
}
返回null;
}
}
我确信这是我犯的一个简单的错误,但我遇到的问题是我最终的排名如下:
123356
您建议采取什么措施来跟踪员工应处于的职位?以下内容应适用:
public final class RankingUtil {
public static Integer getClassStanding(StudentGrades studentGrades, List<StudentGrades> allStudentGrades) {
int classRank = 0;
int rankCarryOver = 0;
BigDecimal lastScore = BigDecimal.ZERO;
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.compareTo(sg.getGradeSheetScoreTotalAchieved()) != 0) {
classRank++;
classRank = classRank + rankCarryOver;
rankCarryOver = 0;
} else {
rankCarryOver++;
}
secondLastScore = lastScore;
lastScore = sg.getGradeSheetScoreTotalAchieved();
if (sg.equals(studentGrades)) {
return classRank;
}
}
return null;
}
公共最终类RankingUtil{
公共静态整数getClassStanding(StudentGrades StudentGrades,列出所有StudentGrades){
int classRank=0;
int rankCarryOver=0;
BigDecimal lastScore=BigDecimal.0;
Collections.sort(allStudentGrades,newcomparator(){
公共整数比较(学生等级o1,学生等级o2){
return-o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});
适用于(学生成绩sg:所有学生成绩){
如果(lastScore.compareTo(sg.GetGradeSheetScoreTotalAcquired())!=0){
classRank++;
classRank=classRank+rankCarryOver;
rankCarryOver=0;
}否则{
rankCarryOver++;
}
secondLastScore=lastScore;
lastScore=sg.getGradeSheetScoreTotalAcquired();
如果(sg.等于(学生成绩)){
返回classRank;
}
}
返回null;
}
}下面的内容应该可以使用:
public final class RankingUtil {
public static Integer getClassStanding(StudentGrades studentGrades, List<StudentGrades> allStudentGrades) {
int classRank = 0;
int rankCarryOver = 0;
BigDecimal lastScore = BigDecimal.ZERO;
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.compareTo(sg.getGradeSheetScoreTotalAchieved()) != 0) {
classRank++;
classRank = classRank + rankCarryOver;
rankCarryOver = 0;
} else {
rankCarryOver++;
}
secondLastScore = lastScore;
lastScore = sg.getGradeSheetScoreTotalAchieved();
if (sg.equals(studentGrades)) {
return classRank;
}
}
return null;
}
公共最终类RankingUtil{
公共静态整数getClassStanding(StudentGrades StudentGrades,列出所有StudentGrades){
int classRank=0;
int rankCarryOver=0;
BigDecimal lastScore=BigDecimal.0;
Collections.sort(allStudentGrades,newcomparator(){
公共整数比较(学生等级o1,学生等级o2){
return-o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});
适用于(学生成绩sg:所有学生成绩){
如果(lastScore.compareTo(sg.GetGradeSheetScoreTotalAcquired())!=0){
classRank++;
classRank=classRank+rankCarryOver;
rankCarryOver=0;
}否则{
rankCarryOver++;
}
secondLastScore=lastScore;
lastScore=sg.getGradeSheetScoreTotalAcquired();
如果(sg.等于(学生成绩)){
返回classRank;
}
}
返回null;
}
}下面的内容应该可以使用:
public final class RankingUtil {
public static Integer getClassStanding(StudentGrades studentGrades, List<StudentGrades> allStudentGrades) {
int classRank = 0;
int rankCarryOver = 0;
BigDecimal lastScore = BigDecimal.ZERO;
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.compareTo(sg.getGradeSheetScoreTotalAchieved()) != 0) {
classRank++;
classRank = classRank + rankCarryOver;
rankCarryOver = 0;
} else {
rankCarryOver++;
}
secondLastScore = lastScore;
lastScore = sg.getGradeSheetScoreTotalAchieved();
if (sg.equals(studentGrades)) {
return classRank;
}
}
return null;
}
公共最终类RankingUtil{
公共静态整数getClassStanding(StudentGrades StudentGrades,列出所有StudentGrades){
int classRank=0;
int rankCarryOver=0;
BigDecimal lastScore=BigDecimal.0;
Collections.sort(allStudentGrades,newcomparator(){
公共整数比较(学生等级o1,学生等级o2){
return-o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});
适用于(学生成绩sg:所有学生成绩){
如果(lastScore.compareTo(sg.GetGradeSheetScoreTotalAcquired())!=0){
classRank++;
classRank=classRank+rankCarryOver;
rankCarryOver=0;
}否则{
rankCarryOver++;
}
secondLastScore=lastScore;
lastScore=sg.getGradeSheetScoreTotalAcquired();
如果(sg.等于(学生成绩)){
返回classRank;
}
}
返回null;
}
}下面的内容应该可以使用:
public final class RankingUtil {
public static Integer getClassStanding(StudentGrades studentGrades, List<StudentGrades> allStudentGrades) {
int classRank = 0;
int rankCarryOver = 0;
BigDecimal lastScore = BigDecimal.ZERO;
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.compareTo(sg.getGradeSheetScoreTotalAchieved()) != 0) {
classRank++;
classRank = classRank + rankCarryOver;
rankCarryOver = 0;
} else {
rankCarryOver++;
}
secondLastScore = lastScore;
lastScore = sg.getGradeSheetScoreTotalAchieved();
if (sg.equals(studentGrades)) {
return classRank;
}
}
return null;
}
公共最终类RankingUtil{
公共静态整数getClassStanding(StudentGrades StudentGrades,列出所有StudentGrades){
int classRank=0;
int rankCarryOver=0;
BigDecimal lastScore=BigDecimal.0;
Collections.sort(allStudentGrades,newcomparator(){
公共整数比较(学生等级o1,学生等级o2){
return-o1.getFinalPercentage().compareTo(o2.getFinalPercentage());
}
});
适用于(学生成绩sg:所有学生成绩){
如果(lastScore.compareTo(sg.GetGradeSheetScoreTotalAcquired())!=0){
classRank++;
classRank=classRank+rankCarryOver;
rankCarryOver=0;
}否则{
rankCarryOver++;
}
secondLastScore=lastScore;
lastScore=sg.getGradeSheetScoreTotalAcquired();
如果(sg.等于(学生成绩)){
返回classRank;
}
}
返回null;
}
}我认为你把这件事复杂化了。基本上,
classRank
只是列表中的位置,除非分数与之前相同,在这种情况下,排名是相同的