正在回答 回答被采纳积分+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对象的排序方法就可以了。
如下:
// 对各班语文成绩按平均分进行由大到小排序
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());
}
}调用如下:
// 对语文成绩进行排序后输出 school.sortChineseByAverage();
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星