请问老师,平均分排序问题该怎么做?
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; } }
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); } } }
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); } } }
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对象已经根据班级信息进行了排序,可以进行输出展示了。
以上就是根据平均成绩进行排序的思路,这里还有个小细节,就是主学生列表不应当参与排序,所以在遍历学校的班级列表时,主学生列表可以排除在外。
同学可以根据上面的提示,自己尝试实现一下,如果还有问题,可以继续提问,
祝学习愉快~
- 参与学习 人
- 提交作业 9400 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星