学习算法的第一天

完成将若干人随机补全到若干位置上要求某个属性值必须进行分类

以下使用的技术是springboot,mybatisplus,spring,springmvc,这是完成选择导师系统的真是案例希望对你有帮助,代码不是特别好希望大佬可以指点!!!

    @Override
    @Transactional
    public boolean thressFp() {

        //查找未选满的教师(还有名额的教师)
        List<Tutor> tutors=tutorMapper.notFull();
        HashMap<String,Integer> hashMapTutor=new HashMap();
        //教师id对应分配的学生
        Map<String,List<Student>> stringListMap=new HashMap();
//        将所有教师剩余名额存进map集合
        for (Tutor tutor : tutors) {
            hashMapTutor.put(tutor.getTutorId(),tutor.getStudentSize());
        }
        //未被选中的学生
        List<Student> list=tutorMapper.notTutor();
        //便利所有老师的key和所带学生数
        for(HashMap.Entry<String,Integer> entry : hashMapTutor.entrySet()) {
            //便利老师的key获取选择的数
            String tutorId = entry.getKey();
            //获取老师的名额
            Integer name = hashMapTutor.get(tutorId);
            Integer nasss = name;
            // 创建一个生产随机数的对象
            Random r = new Random();
            List<Student> students=new ArrayList<>();
            List<String> major=new ArrayList<>();
            //根据老师名额带学生
            for (int i = nasss-1; i >= 0; i--) {

                //学生都分配完成直接跳出本次循环
                if(list.size()==0){
                    continue;
                }
                //对list集合进行筛选(老师分为三个状态:一个没选、已选)
                //(1)根据学号获得教师信息
                if(name==8){
                    name--;
                    // 通过对象方法获取随机数
                    if(list.size()==0){
                        continue;
                    }
                    int i1 = r.nextInt(list.size());
                    //获取学生信息
                    Student integer = list.get(i1);
                    major.add(integer.getMajor());
                    //存入学生的List集合
                    students.add(integer);
                    //移除这个下标对应的值进行下一次循环
                    list.remove(i1);
                }else {
                    if(major.size()==0){
                        Tutor tu = tutorService.getById(tutorId);
                        List<StudentExcel> excelFinalTutor = studentMapper.findExcelFinalTutor(tu.getTutorName());
                        major.add(excelFinalTutor.get(0).getMajor());
                    }
                    String s = major.get(0);
                    List<Student> studentList=new ArrayList<>();
                    for (Student student : list) {

                        if(student.getMajor().equals(s)){
                            studentList.add(student);

                        }
                    }
                    if(studentList.size()==0){
                        continue;
                    }
                    // 通过对象方法获取随机数
                    int i1 = r.nextInt(studentList.size());
                    //获取学生信息
                    Student integer = studentList.get(i1);
                    //存入学生的List集合
                    students.add(integer);
                    for (int i2 = 0; i2 < list.size(); i2++) {
                        if(list.get(i2).getStudentId().equals(integer.getStudentId())){
                            list.remove(i2);
                        }
                    }
                    //移除这个下标对应的值进行下一次循环
                    studentList.remove(i1);
                }
            }



            //录入map集合
            stringListMap.put(entry.getKey(),students);
            //判断
            if(list.size()==0){
                break;
            }
        }



        for (Tutor tutor : tutors) {
            int i=0;
            List<Student> students = stringListMap.get(tutor.getTutorId());
            if(students==null){
                continue;
            }
            for (Student student : students) {
                student.setPd(1);
                studentMapper.updateById(student);
                //封装SelectedTopic对象
                SelectedTopic selectedTopic=new SelectedTopic();
                selectedTopic.setPd(1);
                selectedTopic.setStudentId(student.getStudentId());
                selectedTopic.setTutorName(tutor.getTutorName());
                UpdateWrapper<SelectedTopic> updateWrapper=new UpdateWrapper<>();
                updateWrapper.lambda().set(SelectedTopic::getPd,1).set(SelectedTopic::getTutorName,tutor.getTutorName())
                        .eq(SelectedTopic::getStudentId,student.getStudentId());
                QueryWrapper<SelectedTopic> selectedTopicQueryWrapper=new QueryWrapper<>();
                selectedTopicQueryWrapper.lambda().eq(SelectedTopic::getStudentId,student.getStudentId());
                if(selectedTopicMapper.selectOne(selectedTopicQueryWrapper)!=null){
                    selectedTopicMapper.update(selectedTopic,updateWrapper);
                }else{
                    selectedTopic.setTopic("未知");
                    selectedTopic.setDirection("未知");
                    //如果没有该学生的任何信息直接进行录入
                    selectedTopicMapper.insert(selectedTopic);
                }
                i++;
            }
            tutor.setStudentSize(tutor.getStudentSize()-i);
            tutorMapper.updateById(tutor);
            if(tutor.getStudentSize()==0){
                tutor.setTutorStudentJudge(1);
            }
        }

        return true;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值