我想了一个比较简单的排列成绩平均分的方法,测试了3组数据都是对的,请老师指点一下。

我想了一个比较简单的排列成绩平均分的方法,测试了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

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2020-09-10 16:54:07

同学你好,当前这个语句可以这样理解:

scoreMap.entrySet()的返回值是一个Set类型的集合,而Set类型的集合是collection的子类

http://img1.sycdn.imooc.com//climg/5f59e84a09ec4b9404870108.jpg

http://img1.sycdn.imooc.com//climg/5f59e8bb09412e9405280073.jpg

在ArrayList的构造方法中,可以传入一个collection或collection子类类型的集合,来创建这个ArrayList的集合:

http://img1.sycdn.imooc.com//climg/5f59e8a709982de108610223.jpg

所以如上操作,可以得到一个指定的Set集合的元素的ArrayList。

继续加油 祝:学习愉快~

好帮手慕小班 2020-07-31 16:10:16

同学你好,检查同学贴出代码,同学是可以正常实现排序的功能的,但是有一个小问题,在输出平均成绩时,还是建议加上班级名称哟,比如:

http://img1.sycdn.imooc.com//climg/5f23d060090a1c5f06660293.jpg

同学可以定义一个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());
      }

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(scoreMap.entrySet());老师,请问这个语句怎么理解?scoreMap.entrySet()返回的是Set集合,看了下API手册 ArrayList类中的构造方法也没有这种传Set集合的形式?
    2020-09-10 12:02:57
  • 同学你好,小慕在上面的回答中回复了同学这个问题。 祝:学习愉快~
    2020-09-10 16:54:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师