我想了一个比较简单的排列成绩平均分的方法,测试了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()); }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9401 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星