我想了一个比较简单的排列成绩平均分的方法,测试了3组数据都是对的,请老师指点一下。
//在BanJi类添加求该班级学生的语文平均分方法
public double getChineseScore(){
double sum=0; //语文总分
int count=0; //count用于得到该班级有多少学生
for(Student stu:stuList){
sum=sum+stu.getChinese();
count++;
}
return sum/count;
}
public void sortChineseByAverage(){
//集合a用于存放每个对象的语文成绩平均分
List<Double> a=new ArrayList<Double>();
//it用于存放schoolMap的value,也就是BanJi对象
Iterator<BanJi> it=schoolMap.values().iterator();
while(it.hasNext()){
//遍历schoolMap的value,将得到的平均分存入集合a
a.add(it.next().getChineseScore());
}
Collections.sort(a);
//升序排列
for(Double d:a){
System.out.println(d);
}
}
正在回答 回答被采纳积分+1
同学你好,检查同学贴出代码,同学是可以正常实现排序的功能的,但是有一个小问题,在输出平均成绩时,还是建议加上班级名称哟,比如:

同学可以定义一个map集合,遍历班级列表,获取到班级列表和班级成绩后,将班级和平均成绩存入map集合中,然后对其进行排序。具体思路老师写在了注释中。
BanJi banJi = null;
//获取班级名称列表
Set<String> stuListSet = schoolMap.keySet();
Map scoreMap = new HashMap<String, Float>();
//遍历班级列表
for (String s : stuListSet) {
if (s.equals("主学生列表"))
continue;
banJi = this.searchBanJiByName(s);
if (banJi == null) {
System.out.println("此班级不存在");
} else {
float sum = 0.0f;
int i = 0;
//获取每个班级学生列表
List<Student> stuList = banJi.getStuList();
//用迭代器遍历学生集合,计算成绩总分
Iterator<Student> it = stuList.iterator();
while (it.hasNext()) {
i++;
sum += it.next().getChinese();
}
//计算平均分
float avg = sum / i;
//班级名称作为键值,平均分作为value值存入map集合中
scoreMap.put(s, avg);
}
}
// 将每个键值存入list集合
List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(scoreMap.entrySet());
// 然后通过比较器来实现排序
Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {
// 降序排序
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
System.out.println("排序后的数据为");
for (Map.Entry<String, Float> mapping : list) {
System.out.println(mapping.getKey() + "的平均分:" + mapping.getValue());
}如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程



恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星