Java实现学生报到后,根据规则自动分班。

1、 班级人数不能大于班级人数最大值。
2、 分班规则可以按成绩平衡(按成绩排序分配第一轮1班、2班、3班,第二轮 3班、2班、1班,依次类推 )、性别平衡自动分配。
3、 重名人员不允许分配到一个班级。

没太明白你的意思,你能简要的举个例子吗,这样我们好理解

思路:
1、学生a人,班级数b,每班人数最大值为c(a/b<=b);
2、成绩和性别那个优先级高?将学生按照成绩排名,进行循环分配,循环次数(a/b,向上取整),每次循环内部再判断每个班级里面的男女人数,根据两个条件分配;
3、循环内部当把学生分到班级之前进行名字查重判断(这个应该是循环内部先执行,再执行上面第二部);


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student {
    private String name;
    private int score;
    private char gender;

    public Student(String name, int score, char gender) {
        this.name = name;
        this.score = score;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public char getGender() {
        return gender;
    }
}

class Class {
    private int maxCapacity;
    private List<Student> students;

    public Class(int maxCapacity) {
        this.maxCapacity = maxCapacity;
        this.students = new ArrayList<>();
    }

    public boolean addStudent(Student student) {
        if (students.size() >= maxCapacity) {
            return false; // 班级已满
        }

        for (Student s : students) {
            if (s.getName().equals(student.getName())) {
                return false; // 重名学生不允许在同一班级
            }
        }

        students.add(student);
        return true;
    }

    public List<Student> getStudents() {
        return students;
    }
}

public class Main {
    public static void main(String[] args) {
        int numClasses = 3; // 班级数量
        int maxClassSize = 30; // 班级人数最大值

        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("张三", 85, 'M'));
        studentList.add(new Student("李四", 92, 'M'));
        studentList.add(new Student("王五", 78, 'F'));
        studentList.add(new Student("赵六", 88, 'M'));
        // 添加更多学生...

        // 按成绩降序排序学生列表
        Collections.sort(studentList, Comparator.comparingInt(Student::getScore).reversed());

        List<Class> classList = new ArrayList<>();
        for (int i = 0; i < numClasses; i++) {
            classList.add(new Class(maxClassSize));
        }

        int round = 0;
        for (Student student : studentList) {
            // 切换到下一轮的班级顺序
            int currentClass = round % numClasses;

            boolean added = classList.get(currentClass).addStudent(student);
            if (!added) {
                System.out.println("无法将学生分配到班级:" + student.getName());
            }

            round++;
        }