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++;
}