奋斗的小纯 2024-08-04 19:36 采纳率: 0%
浏览 5
已结题

Java实现根据不同字段集中或分散综合分班

如今我有学生数据集合List,班级集合List,bjxx有最大人数字段bjzdrs,如今我需要将这些学生分入班级,有分班规则集合List 实体类FbGz为

public class FbGz { private String id; //规则类型(1-学生姓名 2-学生成绩 3-学生籍贯 4-学生年龄) private String gzlx; //规则方式(1-集中 2-分散) private String gzfs; }其中gzlx有4种,根据gzlx可以选择学生该字段为集中分班还是分散分班,如何根据规则集合实现综合分班,分班规则由集合数据顺序由强到弱

  • 写回答

2条回答 默认 最新

  • CSDN专家-微编程 2024-08-04 23:16
    关注

    根据规则集合实现综合分班,可以按照以下步骤进行操作:

    1. 遍历班级集合List,获取每个班级的最大人数字段bjzdrs。
    2. 根据规则集合List的顺序,依次判断每个规则的规则类型gzlx。
    3. 根据规则类型选择相应的分班方式gzfs,如果是集中分班方式,则将学生按照该规则进行集中分班;如果是分散分班方式,则将学生按照该规则进行分散分班。
    4. 将学生分入班级,分班的具体逻辑可以根据不同的规则类型进行编写,比如按学生姓名进行排序后分班,按学生成绩进行排序后分班,按学生籍贯进行排序后分班,或者按学生年龄进行排序后分班。
    5. 每次分班操作后,要更新班级的最大人数字段bjzdrs,更新方式为当前最大人数减去已分班的学生人数。
    6. 重复步骤2到步骤5,直到分班规则集合List中的所有规则都被执行完毕,或者班级的最大人数字段bjzdrs已经达到或超过了学生的总人数。

    通过以上步骤,可以根据规则集合实现综合分班,并根据规则的强弱顺序进行分班操作。

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            // 创建学生数据集合
            List<Student> studentList = new ArrayList<>();
            studentList.add(new Student("张三", 80, "北京", 18));
            studentList.add(new Student("李四", 75, "上海", 17));
            studentList.add(new Student("王五", 90, "广州", 19));
            studentList.add(new Student("赵六", 85, "北京", 16));
            studentList.add(new Student("刘七", 95, "上海", 17));
            
            // 创建班级集合
            List<Classroom> classroomList = new ArrayList<>();
            classroomList.add(new Classroom("一班", 30));
            classroomList.add(new Classroom("二班", 35));
            classroomList.add(new Classroom("三班", 30));
            
            // 创建分班规则集合
            List<FbGz> ruleList = new ArrayList<>();
            ruleList.add(new FbGz("1", "1", "1"));
            ruleList.add(new FbGz("2", "2", "1"));
            ruleList.add(new FbGz("3", "1", "2"));
            ruleList.add(new FbGz("4", "2", "2"));
            
            // 根据规则集合实现综合分班
            for (FbGz rule : ruleList) {
                List<Student> selectedStudents = selectStudentsByRule(studentList, rule);
                distributeStudentsToClassrooms(selectedStudents, classroomList, rule.getGzfs());
            }
            
            // 输出分班结果
            for (Classroom classroom : classroomList) {
                System.out.println(classroom);
            }
        }
        
        // 根据规则选择学生
        private static List<Student> selectStudentsByRule(List<Student> students, FbGz rule) {
            List<Student> selectedStudents = new ArrayList<>();
            switch (rule.getGzlx()) {
                case "1": // 学生姓名
                    selectedStudents = selectStudentsByStudentName(students, rule.getGzfs());
                    break;
                case "2": // 学生成绩
                    selectedStudents = selectStudentsByStudentScore(students, rule.getGzfs());
                    break;
                case "3": // 学生籍贯
                    selectedStudents = selectStudentsByStudentNativePlace(students, rule.getGzfs());
                    break;
                case "4": // 学生年龄
                    selectedStudents = selectStudentsByStudentAge(students, rule.getGzfs());
                    break;
            }
            return selectedStudents;
        }
        
        // 按学生姓名选择学生
        private static List<Student> selectStudentsByStudentName(List<Student> students, String rule) {
            List<Student> selectedStudents = new ArrayList<>();
            for (Student student : students) {
                if (rule.equals("1")) { // 集中分班,按姓名字母顺序分配
                    if (student.getName().charAt(0) <= '张') {
                        selectedStudents.add(student);
                    }
                } else if (rule.equals("2")) { // 分散分班,按姓名字母逆序分配
                    if (student.getName().charAt(0) > '张') {
                        selectedStudents.add(student);
                    }
                }
            }
            return selectedStudents;
        }
        
        // 按学生成绩选择学生
        private static List<Student> selectStudentsByStudentScore(List<Student> students, String rule) {
            List<Student> selectedStudents = new ArrayList<>();
            for (Student student : students) {
                if (rule.equals("1")) { // 集中分班,按成绩从高到低分配
                    if (student.getScore() >= 90) {
                        selectedStudents.add(student);
                    }
                } else if (rule.equals("2")) { // 分散分班,按成绩从低到高分配
                    if (student.getScore() < 90) {
                        selectedStudents.add(student);
                    }
                }
            }
            return selectedStudents;
        }
        
        // 按学生籍贯选择学生
        private static List<Student> selectStudentsByStudentNativePlace(List<Student> students, String rule) {
            List<Student> selectedStudents = new ArrayList<>();
            for (Student student : students) {
                if (rule.equals("1")) { // 集中分班,选择北京籍贯的学生
                    if (student.getNativePlace().equals("北京")) {
                        selectedStudents.add(student);
                    }
                } else if (rule.equals("2")) { // 分散分班,选择非北京籍贯的学生
                    if (!student.getNativePlace().equals("北京")) {
                        selectedStudents.add(student);
                    }
                }
            }
            return selectedStudents;
        }
        
        // 按学生年龄选择学生
        private static List<Student> selectStudentsByStudentAge(List<Student> students, String rule) {
            List<Student> selectedStudents = new ArrayList<>();
            for (Student student : students) {
                if (rule.equals("1")) { // 集中分班,选择年龄大于等于18岁的学生
                    if (student.getAge() >= 18) {
                        selectedStudents.add(student);
                    }
                } else if (rule.equals("2")) { // 分散分班,选择年龄小于18岁的学生
                    if (student.getAge() < 18) {
                        selectedStudents.add(student);
                    }
                }
            }
            return selectedStudents;
        }
        
        // 将学生分配到班级
        private static void distributeStudentsToClassrooms(List<Student> students, List<Classroom> classrooms, String rule) {
            if (rule.equals("1")) { // 集中分班,按班级容量从大到小分配
                students.sort((s1, s2) -> s2.getId().compareTo(s1.getId()));
            } else if (rule.equals("2")) { // 分散分班,按班级容量从小到大分配
                students.sort((s1, s2) -> s1.getId().compareTo(s2.getId()));
            }
            
            int currentClassroomIndex = 0;
            for (Student student : students) {
                Classroom classroom = classrooms.get(currentClassroomIndex);
                if (classroom.getStudents().size() < classroom.getMaxCapacity()) {
                    classroom.addStudent(student);
                } else {
                    currentClassroomIndex++;
                    if (currentClassroomIndex >= classrooms.size()) {
                        currentClassroomIndex = 0;
                    }
                    classroom = classrooms.get(currentClassroomIndex);
                    classroom.addStudent(student);
                }
            }
        }
    }
    
    class Student {
        private String name;
        private int score;
        private String nativePlace;
        private int age;
        
        public Student(String name, int score, String nativePlace, int age) {
            this.name = name;
            this.score = score;
            this.nativePlace = nativePlace;
            this.age = age;
        }
        
        // getter 和 setter 方法
        // ...
    }
    
    class Classroom {
        private String name;
        private int maxCapacity;
        private List<Student> students;
        
        public Classroom(String name, int maxCapacity) {
            this.name = name;
            this.maxCapacity = maxCapacity;
            this.students = new ArrayList<>();
        }
        
        public void addStudent(Student student) {
            students.add(student);
        }
        
        public List<Student> getStudents() {
            return students;
        }
        
        // getter 和 setter 方法
        // ...
    }
    
    class FbGz {
        private String id;
        private String gzlx;
        private String gzfs;
        
        public FbGz(String id, String gzlx, String gzfs) {
            this.id = id;
            this.gzlx = gzlx;
            this.gzfs = gzfs;
        }
        
        // getter 和 setter 方法
        // ...
    }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月7日
  • 创建了问题 8月4日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?