正在回答 回答被采纳积分+1
2回答
好帮手慕阿慧
2020-05-05 19:14:05
同学你好,以语文排序为例,思路如下:
1、定义一个Map,key存放班级名称,value存放平均成绩。假设变量名为score。
2、遍历schoolMap,根据班级名称得到班级对象。
3、根据班级对象获得班级中所有学生,遍历所有学生求出平均成绩。将班级的平均分添加到score中。
4、将score转换到List中,也就是将Map的Entry存放的List中。然后按照Map的Value值进行排序。
5、遍历list输出各班平均分信息。
测试类中调用School对象的排序方法就可以了。
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | // 对各班语文成绩按平均分进行由大到小排序 public void sortChineseByAverage() { Map<String, Float> score = new HashMap<String, Float>(); BanJi banJi = null ; List<Student> stuList = null ; float sum = 0 .0f; float average = 0 .0f; // 求各班平均分 // 得到所有班对应的班级名称,根据名称得到班级对象 Set<String> nameSet = schoolMap.keySet(); if (nameSet != null ) { for (String s : nameSet) { if (s.equals( "主学生列表" )) continue ; sum = 0 .0f; banJi = schoolMap.get(s); stuList = banJi.getStuList(); if (stuList != null ) { for (Student stu : stuList) { sum = sum + stu.getChinese(); } // 求平均分 average = sum / stuList.size(); // 将每个班级的平均分添加到列表score中 score.put(banJi.getClassName(), average); } else { System.out.println( "该班级没有学生!" ); } } } else { System.out.println( "还未添加班级!" ); } // 输出排序后的学生成绩(提供排序的代码) // 先将Map转换到List中,也就是将Map的Entry存放的List中 List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(score.entrySet()); // 按照Map的Value值进行排序 Collections.sort(list, new Comparator<Map.Entry<String, Float>>() { // 降序排序 @Override public int compare(Entry<String, Float> o1, Entry<String, Float> o2) { // return o1.getValue().compareTo(o2.getValue()); return o2.getValue().compareTo(o1.getValue()); } }); for (Map.Entry<String, Float> mapping : list) { System.out.println(mapping.getKey() + ":" + mapping.getValue()); } } |
调用如下:
1 2 | // 对语文成绩进行排序后输出 school.sortChineseByAverage(); |
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧