Zaylour 2018-08-22 06:30 采纳率: 69.2%
浏览 3774
已采纳

一个ArrayList中的分数怎么排名次,分数相同名次就相同。

这个list里面是对象来的,假如:
class stu{
String name;
String score;//分数
String rank;//名次
}
List students=new ArrayList();
students.add(new stu('张3','60',''));
students.add(new stu('张4','65',''));
students.add(new stu('张5','65',''));
students.add(new stu('张6','80',''));
//----------------------------------------
syso(students)//假设目前的输出的顺序已经是按照从小到大的来输出,名次现在还是空的。
如果分数相同,名次不相同的话:
int num=stu.size();
for(stu s:students){
s.rank=num;
num--;
}//这样子应该就可以了,但是如果想要分数相同,名次也一样,然后再输出来,应该怎么弄,
我想了好久,用了冒泡和选择排序都没有解决问题,应该是哪里没有考虑周道,我是实在想不到了,哪位大哥帮帮忙。

  • 写回答

9条回答 默认 最新

  • coder_xiaozhao 2018-08-22 06:55
    关注

    首先先用冒泡排序将他们的分数由大到小排列出来,代码如下

    for (int i = 1; i < students.size(); i++)
    {
    for (int j = 0; j < listMineRs.Count - i; j++)
    {
    if (students[j].score < students[j + 1].score)
    {
    stu temp = listMineRs[j];
    students[j] = students[j + 1];
    students[j + 1] = temp;
    }
    }
    }
    # 然后再循环一遍这个list给他们的排名赋值
    int count = 1;
    for(int i=0;i<students.size();i++)
    {
    if(i=0)
    {
    students[i].rank=count;
    count++;
    }
    else{
    if(students[i].score==students[i-1].score){
    students[i].rank=students[i-1].rank;
    }else{
    students[i].rank = count;
    count++;
    }

            }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?