老师,这里两种排序方法有些问题要问
/*方案一*/ Map<String, Float> scoreMap = new HashMap<String, Float>(); Set<String> scoreList = schoolMap.keySet(); Banji bj = null; for (String s : scoreList) { bj = this.searchByName(s); if (bj == null) { System.out.println("该班级不存在"); break; } else { float sum = 0.0f; int i = 0; List<Student> listStudent = bj.getStuList(); Iterator<Student> it = listStudent.iterator(); if (it.hasNext()) { i++; sum +=it.next().getChinese(); } float ave = sum / i; scoreMap.put(s, ave); } } List<Map.Entry<String, Float>> lm = new ArrayList<Map.Entry<String, Float>>(scoreMap.entrySet()); Collections.sort(lm, new Comparator<Map.Entry<String, Float>>() { public int compare(Map.Entry<String, Float> o1, Map.Entry<String, Float> o2) { return o2.getValue().compareTo(o1.getValue()); } }); for (Map.Entry<String, Float> mes : lm) { System.out.println("排序后的数据为:"); System.out.println(mes.getKey() + "的平均分为:" + mes.getValue()); } /*方案二*/ // /*按班级名称--平均分存储分数*/ // Map<String, Float> score = new HashMap<String, Float>(); // /*获取班级名称集合*/ // Set<String> BjName = schoolMap.keySet(); // List < Student > stuList = null; // Banji banjiName = null; // // if (BjName == null) { // System.out.println("该班级不存在"); // } else { // for (String s : BjName) { // float sum = 0.0f; // float avg = 0.0f; // if(s.equals("主学生表")){ // continue; // }else { // /*从集合获取班级名称*/ // banjiName = schoolMap.get(s); // /*获取每个班的学生对象*/ // stuList = banjiName.getStuList(); // if (stuList == null) { // System.out.println("该班级没有学生"); // } else { // /*遍历求和*/ // for (Student stu : stuList // ) { // sum = sum + stu.getChinese(); // } // /*平均分*/ // avg=(float) sum/stuList.size(); // score.put(banjiName.getBanjiName(), avg); // } // } // } // } // /*通过Map.Entry一次性获取Key和Value,然后按对存入List,达到Map转List的操作*/ // List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(score.entrySet()); // Collections.sort(list, new Comparator<Map.Entry<String, Float>>() { // @Override // public int compare(Map.Entry<String, Float> o1, Map.Entry<String, Float> o2) { // return o2.getValue().compareTo(o1.getValue()); // } // // }); //// List转Map,输出排序后 // for(Map.Entry<String,Float> map:list){ // System.out.println(map.getKey()+":"+map.getValue()); // }
测试方案1的结果的输出并不是平均分而是每个班级的第一个输入的成绩,我不知道哪里错了
我作业提交的是采用方案一,当时没细看就提交了。但是应该采用方案二,方案二测试时没问题的
方案一中没有地方体现到排除掉主学生表,当我使用testSchool测试时会输出主学生表,且输出平均分数为NaN,而我在使用test方法时却不会出现主学生表的内容
public void testSchool() { School sch = new School(); Banji mainBj = new Banji("00", "主学生列表"); // Banji bj1 = new Banji("01", "一班"); // bj1.addStudent(mainBj.getStuList().get(0)); // bj1.addStudent(mainBj.getStuList().get(1)); // bj1.addStudent(mainBj.getStuList().get(2)); // School sch = new School(); // sch.addBanji(mainBj); // sch.addBanji(bj1); // Banji seaBj = sch.searchByName("一班"); sch.displayBanJiName(); Student st4 = new Student("s04", "李四"); Student st5 = new Student("s05", "李五"); Banji bj1 = new Banji("01", "一班"); bj1.addStudent(st4); bj1.addStudent(st5); bj1.insertChineseScore("s04",98); bj1.insertChineseScore("s05",99); Student st6 = new Student("s06", "李七"); Student st7 = new Student("s07", "李八"); Banji bj2 = new Banji("02", "二班"); bj2.addStudent(st6); bj2.addStudent(st7); bj2.insertChineseScore("s06",100); bj2.insertChineseScore("s07",90); sch.addBanji(bj1); sch.addBanji(bj2); sch.addBanji(mainBj); sch.sortChineseByAverage(); }
public void test() { TestDemo td = new TestDemo(); Scanner s = new Scanner(System.in); int input1 = 0, input2 = 0, input3 = 0; School sch = new School(); Banji mainBj = new Banji("00", "主学生表"); sch.addBanji(mainBj); while (true) { td.mainMenu(); System.out.println("请输入对应的数字进行操作:"); try { input1 = s.nextInt(); } catch (Exception e) { System.out.println("输入错误,请输入整数重新尝试"); s.next(); continue; } if (input1 == 0) { break; } switch (input1) { case 1: while (true) { //班级管理 td.banJiMenu(); System.out.println("请输入对应的数字进行操作:"); try { input2 = s.nextInt(); } catch (Exception e) { System.out.println("输入错误,请输入整数重新尝试"); s.next(); continue; } if (input2 == 8) { break; } switch (input2) { case 1: //1--添加学生信息到主学生表 System.out.println("添加学生信息到主学生表:"); System.out.println("请输入要添加的学生数量:"); int count = 0; try { count = s.nextInt(); } catch (Exception e) { System.out.println("输入错误,请输入整数重新尝试"); s.next(); break; } for (int i = 1; i <= count; i++) { System.out.println("请输入要添加的第" + i + "学生的ID:"); String stuId = s.next(); Student stuNn=mainBj.searchStudentByNum(stuId); if(stuNn!=null){ System.out.println("该学生已存在"); i=i-1; continue; }else { System.out.println("请输入要添加的第" + i + "学生的名字:"); String stuName = s.next(); Student stu = new Student(stuId, stuName); mainBj.addStudent(stu); System.out.println("添加成功!"); } } mainBj.displayAllStudent(); break; case 2: //2--添加学生信息到普通班级 System.out.println("添加学生信息到普通班级"); System.out.println("请输入要添加学生信息的班级名称:"); String addStuBjName = s.next(); Banji addStuBj = sch.searchByName(addStuBjName); /*查询该班级是否存在*/ if (addStuBj != null) { System.out.println("请输入要添加的学生数量:"); int count1 = 0; try { count1 = s.nextInt(); } catch (Exception e) { System.out.println("输入错误,请输入整数重新尝试"); s.next(); break; } for (int i = 1; i <= count1; i++) { System.out.println("请输入要添加的第" + i + "学生的ID:"); String stuId = s.next(); /*判断主学生信息表中是否存在该学生信息*/ Student stu = mainBj.searchStudentByNum(stuId); if (stu == null) { /*不存在则同时添加到主学生信息表和班级表*/ System.out.println("请输入要添加的第" + i + "学生的名字:"); String stuName = s.next(); stu = new Student(stuId, stuName); mainBj.addStudent(stu); addStuBj.addStudent(stu); System.out.println("添加成功!"); } else { /*若存在,则直接添加到班级信息表*/ addStuBj.addStudent(stu); System.out.println("添加成功!"); } } System.out.println(mainBj); mainBj.displayAllStudent(); System.out.println(addStuBj); addStuBj.displayAllStudent(); } else { System.out.println("该班级不存在,请重新输入!"); } break; case 3: //3--通过学号查询学生信息 System.out.println("通过学号查询学生信息"); System.out.println("请输入要查询学生信息的班级名称:"); Banji selectStuId=sch.searchByName(s.next()); if(selectStuId==null){ System.out.println("该班级不存在"); }else { System.out.println("请输入要查询的学生学号"); Student selectId=selectStuId.searchStudentByNum(s.next()); if(selectId==null){ System.out.println("该学生学号不存在"); }else{ System.out.println(selectId); } } break; case 4: //4--输入班级的语文成绩 float score1 = 0.0f; System.out.println("输入班级的语文成绩:"); System.out.println("请输入要录入语文成绩的班级名称:"); Banji chBjName=sch.searchByName(s.next()); if(chBjName==null){ System.out.println("该班级不存在"); }else if (chBjName.getStuList().size()==0){ System.out.println("该班级中还未添加学生!"); } else { for(int i =1;i<=chBjName.getStuList().size();i++){ chBjName.displayAllStudent(); System.out.println("请输入要录入语文成绩的学生学号"); String stuId=s.next(); Student stu1 = chBjName.searchStudentByNum(stuId); if(stu1==null){ System.out.println("该学生学号不存在"); break; }else { if(stu1.getChinese()!=0.0) { System.out.println("该学生成绩已有"); i=i+1; continue; }else { System.out.println("请输入语文成绩:"); try { score1=s.nextFloat(); } catch (Exception e) { System.out.println("输入错误,请输入小于100的小数重新尝试"); s.next(); break; } chBjName.insertChineseScore(stuId,score1); } } } } break; case 5: //4--输入班级的数学成绩 float score2 = 0.0f; System.out.println("输入班级的数学成绩:"); System.out.println("请输入要录入数学成绩的班级名称:"); Banji MtBjName=sch.searchByName(s.next()); if(MtBjName==null){ System.out.println("该班级不存在"); }else if (MtBjName.getStuList().size()==0){ System.out.println("该班级中还未添加学生!"); } else { for(int i =1;i<=MtBjName.getStuList().size();i++){ MtBjName.displayAllStudent(); System.out.println("请输入要录入数学成绩的学生学号"); String stuId=s.next(); Student stu1 = MtBjName.searchStudentByNum(stuId); if(stu1==null){ System.out.println("该学生学号不存在"); break; }else { if(stu1.getMath()!=0.0) { System.out.println("该学生成绩已有"); }else { System.out.println("请输入数学成绩:"); try { score2=s.nextFloat(); } catch (Exception e) { System.out.println("输入错误,请输入小于100的小数重新尝试"); s.next(); break; } MtBjName.insertMathScore(stuId,score2); } } } } break; case 6: //6--删除学生信息 System.out.println("删除学生信息:"); System.out.println("请输入要删除学生信息的班级名称:"); Banji deleteStu = sch.searchByName(s.next()); if (deleteStu == null) { System.out.println("该班级不存在"); } else { System.out.println("请输入要删除的学生信息的学生学号"); String deleteStuId = s.next(); if (deleteStuId == null) { System.out.println("该学生学号不存在"); } else { deleteStu.deleteStudent(deleteStuId); } } break; case 7: //7--显示所有学生信息 System.out.println("请输入要查询的班级名称:"); Banji disStu = sch.searchByName(s.next()); if ( disStu== null) { System.out.println("该班级不存在"); } else { disStu.displayAllStudent(); } break; default: System.out.println("没有对应的操作。"); break; } } break; case 2: while (true) { td.schoolMenu(); System.out.println("请输入对应的数字进行操作:"); try { input3 = s.nextInt(); } catch (Exception e) { System.out.println("输入错误,请输入整数重新尝试"); s.next(); continue; } if (input3 == 7) { break; } switch (input3) { case 1: //1--创建班级 System.out.println("创建班级"); System.out.println("请输入要创建的班级的编号"); String newBanjiId = s.next(); Banji existence = sch.searchByName(newBanjiId); /*判断班级是否已经存在*/ if (existence == null) { System.out.println("请输入要创建的班级的名称"); String newBanjiName = s.next(); Banji newBanji = new Banji(newBanjiId, newBanjiName); sch.addBanji(newBanji); sch.displayBanJiName(); break; } else { System.out.println("该班级已存在,不能再创建同名班级!"); } break; case 2: //2--删除班级 System.out.println("删除班级"); System.out.println("请输入要删除的班级的名称"); Banji deleteBanji = sch.searchByName(s.next()); if (deleteBanji == null) { System.out.println("该班级不存在,无法被删除"); } else { sch.deleteBanji(deleteBanji); } break; case 3: //3--通过班级名称查询班级信息 System.out.println("通过班级名称查询班级信息"); System.out.println("请输入要查询的班级的名称:"); Banji selectBj = sch.searchByName(s.next()); if (selectBj == null) { System.out.println("该班级不存在"); } else { System.out.println(selectBj); selectBj.displayAllStudent(); } break; case 4: //4--对各班语文成绩按平均分进行有大到小排序 sch.sortChineseByAverage(); break; case 5: //5--对各班数学成绩按平均分进行有大到小排序 sch.sortMathByAverage(); break; case 6: //6--显示所有班级名称 sch.displayBanJiName(); break; default: System.out.println("没有对应的操作。"); break; } } break; default: System.out.println("没有对应的操作。"); break; } } }
8
收起
正在回答 回答被采纳积分+1
3回答
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星