老师,这里两种排序方法有些问题要问

老师,这里两种排序方法有些问题要问

/*方案一*/
        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. 测试方案1的结果的输出并不是平均分而是每个班级的第一个输入的成绩,我不知道哪里错了

  2. 我作业提交的是采用方案一,当时没细看就提交了。但是应该采用方案二,方案二测试时没问题的

  3. 方案一中没有地方体现到排除掉主学生表,当我使用testSchool测试时会输出主学生表,且输出平均分数为NaN,而我在使用test方法时却不会出现主学生表的内容

  4. 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();
        }
  5. 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;
            }
        }
    }

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

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

3回答
好帮手慕小班 2019-10-15 20:07:06

同学你好,这里同学在方案一种不希望testSchool输出主学生表,在testSchool中不添加主学生表就可以了呐,例如:

http://img1.sycdn.imooc.com//climg/5da5b662093916a010550636.jpg

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

芝芝兰兰 2019-10-15 17:31:08

同学你好。非常抱歉当时误会同学的意思了呢,下面来分条说明:

1、方案二由于已经排除了主学生列表。在使用testSchool()测试时应将这句注释掉:sch.addBanji(mainBj);

2、方案一中之所以主学生表分数为NaN是因为测试的时候同学没有在主班级列表中判断并添加。所以实际上主学生列表是没有学生的。也就自然计算不出分数来。

http://img1.sycdn.imooc.com//climg/5da5916d0927a67007050311.jpg

代码中的其余问题,我们已通知批改作业的老师。会结合具体代码给同学批复文档。

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 提问者 mixiaofan #1
    老师你还是理解错了呀。我想问的是为什么方案一既然没有体现移除主学生表这一项的情况,测试Test不会输出主学生表,而测试testSchool时会输出主学生表,并且我的目的是不希望testSchool输出主学生表该怎么做呢。
    2019-10-15 18:06:33
提问者 mixiaofan 2019-10-15 11:28:20

第一个问题解决了,太粗心了,if换成while就可以了,那里应该是循环不是判断

  • 同学自己解决了很棒,这种探索精神值得鼓励哦~~祝学习愉快~
    2019-10-15 11:48:37
  • 提问者 mixiaofan 回复 芝芝兰兰 #2
    还有其他几个问题呀老师
    2019-10-15 11:55:01
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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