`
574965385
  • 浏览: 7724 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

学生成绩排名

阅读更多
我做学校办公管理的项目过程中,需要学生成绩排名。
学生的成绩排名有个特点,就是相同分数,名次相同,但后面的排名要按前面的人数顺次排下去。如有两个第三名,那么接下来就是第五名了。
下面是自己做的测试代码:
public void pxout(){
//在hashmap中放学生成绩,用hashmap来排序
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 80);
map.put("b", 85);
map.put("c", 90);
map.put("d", 95);
map.put("e", 85);
map.put("f", 90);
map.put("g", 90);
map.put("h", 95);


List<Map.Entry<String, Integer>> infoIds =
    new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
System.out.println("排序前");
//排序前
for (int i = 0; i < infoIds.size(); i++) {
    String id = infoIds.get(i).toString();
    System.out.println(id);
}

//排序方法
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {  
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {     
        return (o2.getValue() - o1.getValue());       
    }
});
System.out.println("排序后");
//排序后
for (int i = 0; i < infoIds.size(); i++) {
    String id = infoIds.get(i).toString();
    System.out.println(id);
}

//计算学生名次
HashMap  hashmap = new HashMap();
int currmc=0;
int currfz=0;
int isChange = 1;
for (int i = 0; i < infoIds.size(); i++) {    
if(i>0)
{
currfz = infoIds.get(i-1).getValue();
if(infoIds.get(i).getValue()== currfz)
isChange= 0;
}
if(isChange==1)
{
hashmap.put(infoIds.get(i).getKey(), String.valueOf(i+1));
currmc = i+1;
}
else
{
hashmap.put(infoIds.get(i).getKey(), String.valueOf(currmc));
isChange=1;
}
}
System.out.println("排名次后");
Iterator iter = hashmap.entrySet().iterator();
while (iter.hasNext()) {
Entry entry = (Entry) iter.next();
//Object value= entry.getValue();
//Object key =entry.getKey();
System.out.println(entry.getKey()+ "="+entry.getValue());
}

特简单的,呵呵。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics