1、需求描述
每周5个工作日,每个工作日只要求全员的部分员工到岗,实现公平下的自动排班,给出一个月的排班明细。
2、代码实现
/**
* 自动排班
**/
public class ScheduleAutoJob {
public static void main(String[] args) {
//员工数组
String[] employeeArray = {"张三", "李四", "王五", "李丽", "孙萌", "张凯", "李炜", "赵明", "孙茜", "周雨"};
//工作日数组
String[] workDayArray = {"周一", "周二", "周三", "周四", "周五"};
//每日要求到岗人数
int needNum = 7;
int count = 0;
for(int k=1;k<=4;k++) {
System.out.println("第"+k+"周,值班表:");
//工作日轮询
for (int i = 0; i < workDayArray.length; i++) {
System.out.print(workDayArray[i] + "排班:");
//按所需人数轮询-安排值班员工
for (int j = 1; j <= needNum; j++) {
count++;
int temp = count % employeeArray.length;
//员工数组下标
int tempSub = temp - 1;
//如果整除,取最后一个
if (temp == 0) {
tempSub = employeeArray.length - 1;
}
System.out.print(employeeArray[tempSub] + ";");
}
System.out.println();
}
}
}
}
打印结果输出:
第1周,值班表:
周一排班:张三;李四;王五;李丽;孙萌;张凯;李炜;
周二排班:赵明;孙茜;周雨;张三;李四;王五;李丽;
周三排班:孙萌;张凯;李炜;赵明;孙茜;周雨;张三;
周四排班:李四;王五;李丽;孙萌;张凯;李炜;赵明;
周五排班:孙茜;周雨;张三;李四;王五;李丽;孙萌;
第2周,值班表:
周一排班:张凯;李炜;赵明;孙茜;周雨;张三;李四;
周二排班:王五;李丽;孙萌;张凯;李炜;赵明;孙茜;
周三排班:周雨;张三;李四;王五;李丽;孙萌;张凯;
周四排班:李炜;赵明;孙茜;周雨;张三;李四;王五;
周五排班:李丽;孙萌;张凯;李炜;赵明;孙茜;周雨;
第3周,值班表:
周一排班:张三;李四;王五;李丽;孙萌;张凯;李炜;
周二排班:赵明;孙茜;周雨;张三;李四;王五;李丽;
周三排班:孙萌;张凯;李炜;赵明;孙茜;周雨;张三;
周四排班:李四;王五;李丽;孙萌;张凯;李炜;赵明;
周五排班:孙茜;周雨;张三;李四;王五;李丽;孙萌;
第4周,值班表:
周一排班:张凯;李炜;赵明;孙茜;周雨;张三;李四;
周二排班:王五;李丽;孙萌;张凯;李炜;赵明;孙茜;
周三排班:周雨;张三;李四;王五;李丽;孙萌;张凯;
周四排班:李炜;赵明;孙茜;周雨;张三;李四;王五;
周五排班:李丽;孙萌;张凯;李炜;赵明;孙茜;周雨;