java代码实现年会座位的随机分配
来源:互联网 发布:qq三国js装备好坏 编辑:程序博客网 时间:2024/05/02 16:54
最近人事找我,让我完成一个app,为了高逼格,人事让实现人脸识别签到,签完到后进行座位的随机分配。主要是为了让不同部门的人坐在一起,促进部门人员之间的交流。人脸识别这块不难,直接用了讯飞的人脸识别模块,难的是座位的随机分配啊,这对于长期只会复制粘贴的我来说,写个小程序真的很难。但是没办法,还得自己写,网上又找不到demo。我就把demo贴出来了哈,注释写在上面:
class Desk{ int leftPositions=10; //桌子的剩余座位数 int deskNumber=0;//座位的桌号 public int getLeftPositions() { return leftPositions; } public void setLeftPositions(int leftPositions) { this.leftPositions = leftPositions; } public int getDeskNumber() { return deskNumber; } public void setDeskNumber(int deskNumber) { this.deskNumber = deskNumber; } public Desk(int deskNumber) { this.deskNumber = deskNumber; }}
public class DeskUtil { public static int deskNumbers = 3;//定义座位总的桌数 public static List<Desk> list = new ArrayList<>(); public static Desk onePositionDesk = null; static { //分配桌数 for (int i = 0; i < deskNumbers; i++) { Desk desk = new Desk(i + 1); list.add(desk); } } public static String withFamilyMembers(int totalPersons) { if(list.size()>0){ int maxDeskNumber = 0;//拥有最大剩余座位的序号,注意座位的序号不代表座位的桌号。 int minDeskNumber = 0;//拥有最小剩余座位的序号 for (int i = 0; i < list.size(); i++) { //遍历查询满足特定座位数的拥有最少剩余座位的桌子的序号,例如:totalPersons为3,总共有三桌,1号桌剩余3,2号桌剩余4,3号桌剩余5,此时选择1号桌的三个位置。 Desk targetDesk = list.get(i); if (targetDesk.getLeftPositions() >= totalPersons && targetDesk.getLeftPositions() <= list.get(minDeskNumber).getLeftPositions()) minDeskNumber = i; } if (minDeskNumber == 0) {//因为一开始设置的minDeskNumber值是0,此时要分两种情况,查询结果就是minDeskNumber=0或者查询不到特定的序号此时 if (list.get(minDeskNumber).getLeftPositions() >= totalPersons) {//对应第一种情况 Desk targetDesk = list.get(minDeskNumber); int deskNumber = targetDesk.getDeskNumber(); int leftPositions = targetDesk.getLeftPositions() - totalPersons; if(leftPositions>0) list.get(minDeskNumber).setLeftPositions(leftPositions); else list.remove(minDeskNumber); return "第" + deskNumber + "桌" + totalPersons + "位"; } else { for (int i = 0; i < list.size(); i++) {//对应第二种情况,此时查找出拥有最大剩余座位的序号。例如:totalPersons为6,总共有三桌,1号桌剩余4,2号桌剩余3,3号桌剩余2,此时选择1号桌的4个位置,再递归调用此方法。 Desk targetDesk = list.get(i); if (targetDesk.getDeskNumber() >= list.get(maxDeskNumber).getLeftPositions()) maxDeskNumber = i; } Desk targetDesk = list.get(maxDeskNumber); int deskNumber = targetDesk.getDeskNumber(); int leftPositions = targetDesk.getLeftPositions(); list.remove(maxDeskNumber); return "第" + deskNumber + "桌" + leftPositions + "位" + (totalPersons - leftPositions ==1 ? noFamilyMembers() : withFamilyMembers(totalPersons - leftPositions));//递归调用 } } else {//此时查找出拥有最大剩余座位的序号。 Desk targetDesk = list.get(minDeskNumber); int deskNumber = targetDesk.getDeskNumber(); int leftPositions = targetDesk.getLeftPositions() - totalPersons; if(leftPositions>0) list.get(minDeskNumber).setLeftPositions(leftPositions); else list.remove(minDeskNumber); return "第" + deskNumber + "桌" + totalPersons + "位"; } }else return "座位已满,请联系管理员"; } public static String noFamilyMembers() { int deskNumber; int leftPositions; Desk targetDesk = null; if (onePositionDesk != null) { targetDesk = onePositionDesk; deskNumber = targetDesk.getDeskNumber(); for(int i=0;i<list.size();i++){ if(onePositionDesk.getDeskNumber()==list.get(i).getDeskNumber()){ list.remove(list.get(i)); } } onePositionDesk = null; return "第" + deskNumber + "桌" + 1 + "位"; } else { if (list.size() > 0) { Random random = new Random(); int i = random.nextInt(list.size()); targetDesk = list.get(i); leftPositions = targetDesk.getLeftPositions() - 1; if (leftPositions == 1) {//当某一桌的座位号剩下一个座位的时候,下次分配座位不随机选取,就选这一桌。 onePositionDesk = targetDesk; deskNumber = targetDesk.getDeskNumber(); } else if (leftPositions == 0) { deskNumber = targetDesk.getDeskNumber(); list.remove(i); } else { targetDesk.setLeftPositions(leftPositions); deskNumber = targetDesk.getDeskNumber(); } return "第" + deskNumber + "桌" + 1 + "位"; } else return "座位已满,请联系管理员"; } }}逻辑应该挺简单的哈,里面用到了大学时学的递归。
0 0
- java代码实现年会座位的随机分配
- 随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
- 随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
- 随机分配座位以及8皇后问题
- C语言版随机分配座位问题
- java代码实现随机中奖 的代码
- 公司年会抽奖的一个java实现
- Java实现红包随机分配算法
- 2016CCF、CSP 第二题铁路购票系统的简单座位分配算法(JAVA版)
- Java代码实现随机生成汉字
- 求随机座位算法!!!
- 自动分配座位
- 用matlab实现的教师-考场随机分配
- iOS 随机分配的实现 点赞 红包
- java 抢红包的随机钱数分配问题
- jquery随机展示头像的实现代码
- 生成随机密码的C代码实现
- 生成随机密码的C代码实现
- html5根据不同的宽度加载不同的图片
- 微信小程序入门三: 简易form、本地存储
- redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
- ACM硬币问题
- 为什么65535是极值
- java代码实现年会座位的随机分配
- 集合转换成数组时类型向下转型的问题
- Android微信支付只能调起一次的问题
- 菜鸡的从零开始的web笔记-标签
- Google 超分辨率技术 RAISR:模糊图片瞬间变清晰,运算速度快十倍
- webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
- android系统信息(内存、cpu、sd卡、电量、版本)获取
- 不错的
- FX3学习笔记4-pwm