【有点东西】将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;
}
分班是教学管理中一个重要的环节。如何分班才算平衡?相信很多人都想过这个问题,按总分高低排的方法只分得各的总平均分基本平衡,但受偶然因素影响一些科目之间平衡性很差,而学校评价教师教学成绩却以科目的平衡性评价为主。 因此,我们都希望最好能分得每个科目各都基本平衡,处理这个问题用手工根本难于做到,只有借助计算机的强大数据处理能力,我们才可能解决这个难题,下面示例数据就是最有力的说明,要观看示例效果请按下红色的[开始分班]键。即使你不用平衡各科分班,本软件也是一个又快又好地辅助分班的好助手。多谢使用本免费软件,提出宝贵意见。??使用说明:先在表头填上要分开的数,然后在下面的“要分班的原来学生成绩表”中输入学生的各科的成绩,最后按[开始分班]按钮,稍后你就可以在“结果表”中看到按平衡各科分班结果与按总分分班结果,以及两结果的对比预览表。 注意:1、性别一个字段是必须输入的数据;学号和姓名两个字段可选任一个字段输入,但最好能全部输入。?? 2、性别用“1”表示男,“0”表示女;学号最好能用前面数表示别,后两数表示座号进行编号,以便分班后能方便查出原来所在的级。?? 3、你最多可以输入19个,每77人,6个科目;1463个学生的成绩。科目名称可自行修改。?? 4、各科目的满分成绩不能超过100分,如果超过100分,应先把成绩折为100分,然后输入成绩。 本作者还制作有“教学成绩统计系统”、“课程表编排系统”、“数学工具箱”等软件,全部用EXCEL作为开发平台。????在使用过程中有什么问题,或有什么建议要求,请TET:(0757)8886326或E-mail:lixuedong@peoplemail.com.cn  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值