Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对列表中的项目进行排名_Java_List_Sorting - Fatal编程技术网

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
只是列表中的位置,除非分数与之前相同,在这种情况下,排名是相同的