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

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

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

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


正在回答 回答被采纳积分+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对象的排序方法就可以了。
如下:

// 对各班语文成绩按平均分进行由大到小排序
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();

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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