请问老师,平均分排序问题该怎么做?
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package studentmanagement; import java.util.Objects; public class Student { private String stuNum; //学号 private String stuName; //名字 private float math; //数学分数 private float chinese; //语文分数 public Student(String stuNum, String stuName, float math, float chinese) { this .stuNum = stuNum; this .stuName = stuName; this .math = math; this .chinese = chinese; } /** * 判断学生是否存在 * @param o 学生 * @return 是否存在 */ @Override public boolean equals(Object o) { if ( this ==o){ return true ; } else { if (o.getClass()==Student. class ){ Student sd=(Student) o; return (sd.getStuNum().equals(stuNum))&& (sd.getStuName().equals(stuName)); } } return false ; } @Override public String toString() { return "{" + "学生编号='" + stuNum + '\ '' + ", 学生名字='" + stuName + '\ '' + ", 数学成绩=" + math + ", 语文成绩=" + chinese + '}' ; } @Override public int hashCode() { return Objects.hash(stuNum, stuName, math, chinese); } public String getStuNum() { return stuNum; } public void setStuNum(String stuNum) { this .stuNum = stuNum; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this .stuName = stuName; } public float getMath() { return math; } public void setMath( float math) { this .math = math; } public float getChinese() { return chinese; } public void setChinese( float chinese) { this .chinese = chinese; } } |
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package studentmanagement; import com.imooc.Player.PlayList; import java.util.HashMap; import java.util.Map; import java.util.Set; public class School { private Map<String,BanJi> schoolMap; //存放班级的集合 public School() { schoolMap= new HashMap<String,BanJi>(); } /** * 添加班级 * @param banji */ public void addBanji(BanJi banji){ //添加班级,键对值:班级id,班级 schoolMap.put(banji.getClassName(),banji); } /** * 删除班级 * @param banji */ public void deleteBanji(BanJi banji){ System.out.println( "您要删除的是:" +banji.getClassId()+ " " +banji.getClassName()); schoolMap.remove(banji.getClassName()); System.out.println( "删除成功!" ); } /** * 通过班级名称查询班级 * @param className 班级名称 */ public BanJi searchByName(String className) { BanJi banji= null ; Set<String> banjiSet=schoolMap.keySet(); for (String s:banjiSet){ if (s.equals(className)){ //如果查到了,储存到banji上 banji=schoolMap.get(s); System.out.println( "班级的id为:" +banji.getClassId()+ " 班级的名字为:" +banji.getClassName()); break ; } } return banji; // } } /** *对各班语文成绩按平均分进行由大到小排序 */ public void sortChineseByAverage() { } /** *对各班数学成绩按平均分进行由大到小排序 */ public void sortMathByAverage() {} /** * 显示所有班级名称 */ public void displayBanJiName() { Set<String> schoolMapSet=schoolMap.keySet(); System.out.println( "现有班级为::" ); for (String s:schoolMapSet){ System.out.println(s); } } } |
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | package studentmanagement; import com.imooc.Player.Song; import java.util.ArrayList; import java.util.List; public class BanJi { private String classId; //班级编号 private String className; //班级名字 private List<Student> stuList; //存放学生的集合 public BanJi(String classId, String className) { this .classId = classId; this .className = className; stuList= new ArrayList<Student>(); } public String getClassId() { return classId; } public void setClassId(String classId) { this .classId = classId; } public String getClassName() { return className; } public void setClassName(String className) { this .className = className; } public List getStuList() { return stuList; } public void setStuList(List stuList) { this .stuList = stuList; } /** * 将学生添加进班级 * @param stu 学生 */ public void addStudent(Student stu){ //判断是否存在 Boolean flag= false ; for (Student stu1:stuList){ if (stu1.equals(stu)){ flag= true ; //System.out.println("添加失败,该学生已经存在!!"); break ; } } if (flag){ System.out.println( "添加失败,该学生已经存在!!" ); } else { stuList.add(stu); System.out.println( "添加成功!" ); } } /** * 通过学号查询学生在班级中是否存在 * @param stuNum 学号 * @return 是否存在 */ public Student searchStudentByNum(String stuNum){ Student sd= null ; for (Student sd1:stuList){ if (sd1.getStuNum()==stuNum){ //如果相等就找到了 sd=sd1; break ; } } return sd ; } /** * 输入班级学生的语文成绩 * @param stuNum 学生 * @param score 语文成绩 */ public void insertChineseScore(String stuNum, float score){ Student student1=searchStudentByNum(stuNum); if (student1!= null ) { student1.setChinese(score); System.out.println( "添加成功" ); } else { System.out.println( "该学生不存在,请先添加" ); } } /** * 输入班级学生的数学成绩 * @param stuNum 学生 * @param score 数学成绩 */ public void insertMathScore(String stuNum, float score){ Student student1=searchStudentByNum(stuNum); if (student1!= null ) { student1.setMath(score); System.out.println( "添加成功" ); } else { System.out.println( "该学生不存在,请先添加" ); } } /** * 删除学生信息 * @param stuNum 学生 */ public void deleteStudent(String stuNum){ Student student2=searchStudentByNum(stuNum); if (student2!= null ) { stuList.remove(student2); System.out.println( "删除成功" ); } else { System.out.println( "该学生不存在" ); } } /** * 显示所有学生信息(包括学号和名字) */ public void displayAllStudent(){ System.out.println( "班级中所有学生信息为:" ); for (Student student:stuList){ System.out.println(student); } } } |
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | package studentmanagement; import java.util.ArrayList; import java.util.List; public class TestDemo { /** * 班级测试 */ public void testBanJi(){ Student student1= new Student( "s001" , "张三" , 50 , 60 ); Student student2= new Student( "s002" , "李死" , 60 , 70 ); Student student3= new Student( "s003" , "王五" , 70 , 80 ); Student student4= new Student( "s004" , "老六" , 80 , 90 ); BanJi banji= new BanJi( "a001" , "学前一班" ); banji.addStudent(student1); banji.addStudent(student2); banji.addStudent(student3); banji.addStudent(student4); //判断学生是否全部添加到班级里 banji.displayAllStudent(); { //测试删除方法 banji.deleteStudent( "s002" ); banji.displayAllStudent(); } System.out.println( "-----------------------" ); //通过编号查询信息 System.out.println( "查询到的信息为:" +banji.searchStudentByNum( "s003" )); System.out.println( "-----------------------" ); //添加(修改)语文成绩和数学成绩 banji.insertChineseScore( "s001" , 99 ); banji.insertMathScore( "s001" , 80 ); System.out.println( "查询到的信息为:" +banji.searchStudentByNum( "s001" )); } /** * 学校测试 */ public void testSchool(){ Student student1= new Student( "s001" , "张三" , 50 , 60 ); Student student2= new Student( "s002" , "李死" , 60 , 70 ); Student student3= new Student( "s003" , "王五" , 70 , 80 ); Student student4= new Student( "s004" , "老六" , 80 , 90 ); BanJi banji1= new BanJi( "a001" , "一班" ); BanJi banji2= new BanJi( "a002" , "二班" ); BanJi banji3= new BanJi( "a003" , "三班" ); BanJi banji4= new BanJi( "a004" , "四班" ); banji1.addStudent(student1); banji1.addStudent(student2); banji1.addStudent(student3); banji1.addStudent(student4); School sh = new School(); sh.addBanji(banji1); sh.addBanji(banji2); sh.addBanji(banji3); sh.addBanji(banji4); //测试查找班级 BanJi banJi1=sh.searchByName( "四班" ); if (banJi1== null ){ System.out.println( "班级不存在" ); } //删除班级 sh.deleteBanji(banji2); //查看全部班级 sh.displayBanJiName(); } /** * 主菜单 */ public void mainMenu(){} /** * 学校管理菜单 */ public void schoolMenu(){} /** * 班级管理菜单 */ public void banJiMenu(){} /** * 主流程 */ public void test(){} public static void main(String[] args) { TestDemo td= new TestDemo(); // td.testBanJi(); td.testSchool(); } } |
没思路了呀,不会写
正在回答
同学你好,老师这里给同学提供一些思路,同学可以参考着自己去实现一下。
首先,如果需要计算平均成绩,那么首先要保证各个班级中添加了学生,并且学生添加过成绩。
那么在保证了学生已经添加过成绩时,可以将业务流程拆分成以下环节:
一、将每个班级的所有学生成绩取出,并计算总成绩以便于计算平均成绩
二、将班级信息以及平均成绩存储在集合中,以便于根据班级进行排序
三、输出集合信息,展示排序后的结果。
此时,再将以上三步进行拆解:
第一步:
1.需要遍历学校的集合,取出所有班级,这是一次集合的遍历;
2.在上面的基础上,每次获取的班级中又有学生集合,那么再次获取学生集合,这也是一次集合的遍历;
3.在遍历学生集合时,将学生成绩取出,并使用变量将成绩进行累加;
4.计算该班级平均成绩,即总成绩除以学生集合的size;
5.将班级信息和平均成绩进行存储,此时需要单独声明一个Map集合,key是班级信息(可以简单使用班级名称),value是班级的平均成绩。
第二步:
1.当第一步的学校集合遍历结束,各个班级及其平均成绩已经存储在第一步第5步的Map集合中了;
2.将Map集合中所有的Entry对象取出,存放在List中;
3.声明一个比较器,用于根据学生成绩进行排序。比较器中对比的是List集合中的Entry对象,比较规则是根据value进行排序;
4.使用Collections工具类中的sort方法,将List集合进行排序。
第三步:
当完成上述步骤之后,List集合中的所有Entry对象已经根据班级信息进行了排序,可以进行输出展示了。
以上就是根据平均成绩进行排序的思路,这里还有个小细节,就是主学生列表不应当参与排序,所以在遍历学校的班级列表时,主学生列表可以排除在外。
同学可以根据上面的提示,自己尝试实现一下,如果还有问题,可以继续提问,
祝学习愉快~
- 参与学习 人
- 提交作业 9404 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧