【有点东西】将20位学生进行分班,每个班最多8个学生

本文介绍如何使用Java实现一个班级管理系统,将20名学生按照每班不超过8人的规则自动分配到多个班级,适合处理不同发票类型的限制问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

talk is cheap, show me the code.

应用场景

对一批物品开增值税专票时,限制每张专票最多有8个明细项;
开增值税普票时,限制每张发票最多有200个明细项;

这时我们对这一批物品进行开票时,程序就需要能做到自动拆分成多张发票。

需求及功能实现

将20位学生进行分班,每个班最多8个学生

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * 需求:将20位学生进行分班,每个班最多8个学生
 */
public class Main {

    public static void main(String[] args) {
        // 初始化班级容器
        LinkedList<SchoolClass> schoolClasses = initializeSchoolClasses();
        // 所有学生
        List<Student> allStudents = getAllStudents();
        
        // 遍历学生,进行分班
        for (Student currentStudent : allStudents) {
            SchoolClass currentClass = schoolClasses.getLast();
            // 班级学生人数超过8人,增加班级
            if (currentClass.getStudents().size() >= 8) {
                SchoolClass newSchoolClass = new SchoolClass(new ArrayList<>());
                schoolClasses.addLast(newSchoolClass);
                currentClass = newSchoolClass;
            }
            // 学生进入班级
            currentClass.getStudents().add(currentStudent);
        }

        for (SchoolClass schoolClass : schoolClasses) {
            System.out.println("=============================");
            for (Student student : schoolClass.getStudents()) {
                System.out.println(student);
            }
        }
    }

    /**
     * 初始化班级容器,默认有一个班级
     * 选用{@link LinkedList}作为容器,方便获取最后一个元素
     *
     * @return
     */
    private static LinkedList<SchoolClass> initializeSchoolClasses() {
        LinkedList<SchoolClass> schoolClasses = new LinkedList<>();
        schoolClasses.add(new SchoolClass(new ArrayList<>()));
        return schoolClasses;
    }

    private static List<Student> getAllStudents() {
        List<Student> allStudents = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            allStudents.add(new Student(i, "王" + i, 18, "男", "重庆市南岸区茶园路" + i + "号"));
        }
        return allStudents;
    }

}

控制台输出

=============================
Student(id=1, name=1, age=18, sex=, address=重庆市南岸区茶园路1)
Student(id=2, name=2, age=18, sex=, address=重庆市南岸区茶园路2)
Student(id=3, name=3, age=18, sex=, address=重庆市南岸区茶园路3)
Student(id=4, name=4, age=18, sex=, address=重庆市南岸区茶园路4)
Student(id=5, name=5, age=18, sex=, address=重庆市南岸区茶园路5)
Student(id=6, name=6, age=18, sex=, address=重庆市南岸区茶园路6)
Student(id=7, name=7, age=18, sex=, address=重庆市南岸区茶园路7)
Student(id=8, name=8, age=18, sex=, address=重庆市南岸区茶园路8)
=============================
Student(id=9, name=9, age=18, sex=, address=重庆市南岸区茶园路9)
Student(id=10, name=10, age=18, sex=, address=重庆市南岸区茶园路10)
Student(id=11, name=11, age=18, sex=, address=重庆市南岸区茶园路11)
Student(id=12, name=12, age=18, sex=, address=重庆市南岸区茶园路12)
Student(id=13, name=13, age=18, sex=, address=重庆市南岸区茶园路13)
Student(id=14, name=14, age=18, sex=, address=重庆市南岸区茶园路14)
Student(id=15, name=15, age=18, sex=, address=重庆市南岸区茶园路15)
Student(id=16, name=16, age=18, sex=, address=重庆市南岸区茶园路16)
=============================
Student(id=17, name=17, age=18, sex=, address=重庆市南岸区茶园路17)
Student(id=18, name=18, age=18, sex=, address=重庆市南岸区茶园路18)
Student(id=19, name=19, age=18, sex=, address=重庆市南岸区茶园路19)
Student(id=20, name=20, age=18, sex=, address=重庆市南岸区茶园路20)

可以看到,成功将20位学生分到了三个班级,且每个班最多8个学生,完成需求。

POJO

SchoolClass.java

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

@Data
@AllArgsConstructor
public class SchoolClass {
    private List<Student> students;
}

Student.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private String address;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值