下面这两个方法如何实现?测试类中如何调用?

下面这两个方法如何实现?测试类中如何调用?

  对各班语文成绩按平均分进行由大到小排序

 对各班数学成绩按平均分进行由大到小排序


正在回答 回答被采纳积分+1

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

2回答
好帮手慕阿慧 2020-05-06 12:06:00

同学你好,在没有添加班级时,nameSet应该为null。在添加班级没有添加学生时,班级的stuList应该为null。建议使用if(nameSet!=null && nameSet.size()>0)和if(stuList != null && stuList.size()>0)判断。

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

  • 提问者 慕小白200903 #1
    修改后在添加班级没有添加学生时可以输出"该班级没有学生!",但是在没有添加班级时为什么没有输出"还未添加班级!",因为有主学生列表,老师怎么修改可以把主学生列表排除
    2020-05-06 13:04:35
  • 好帮手慕阿慧 回复 提问者 慕小白200903 #2
    同学你好,可以将判断改为if(nameSet!=null && nameSet.size()>1) 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-05-06 15:39:31
好帮手慕阿慧 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();

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

  • 提问者 慕小白200903 #1
    在没有添加班级时为什么没有输出"还未添加班级!",在添加班级没有添加学生时为什么没有输出"该班级没有学生!"??
    2020-05-06 08:19:01
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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