前言
前段时间有小学弟咨询我考生分配考场的逻辑该怎么做,简单讲解了一下,在这里顺便记录下
demo逻辑
1 2 3 4 5
| 1. 循环班级数组 A 2. 循环每班总座位 B 3. 在B中按照顺序给每个位置分配上 通过随机数取到的随机学号 4. 打印输出 PS:重点要保证3不能重复
|
代码实现
我做的是个非常简单的demo,班级个数和每班人数都是固定的。当然实际生活中可能不是固定的,就需要根据实际情况去优化了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| @Test public void test1126() { int banji = 10; int renShu = 50; int renShuTotal = banji * renShu;
Set<String> xueHaoNoList = getXueHaoNo(); Map<Long,String>[] listMap = new Map[banji]; List<Long> s3 = new ArrayList<>(); for (int i = 1, index = banji; i<= index; i++) { Map<Long,String> map = new HashMap<>(); for (int j=1,index2=renShu; j<=index2;j++) { Long sss = getRandom(renShuTotal,s3); long s2 = 0; for(String xueHao : xueHaoNoList) { if (s2==sss) { map.put((long)j,xuehao); } s2++; } } listMap[i-1]=map; } long i2 =1; for(Map<Long,String> map : listMap) { System.err.println("第"+i2+"个班级的考生分配情况如下:"); System.err.println(map); System.err.println("********************************************"); } }
private Long getRandom(int renShuTotal,List<Long> s3) { Long sss = (long)(Math.random()*renShuTotal); if(s3.contains(sss)) { sss= getRandom(renShuTotal,s3); }else{ s3.add(sss); } return sss; }
private Set<String> getXueHaoNo() { Set<String> xuehaoNoList = new HashSet<>(); for(int i = 0,index = 500; i<index;i++) { Long ss = (long)(Math.random()*1000000000); xuehaoNoList.add(ss.toString()); } return xuehaoNoList; }
|
未经允许不得转载: 幻凡ss » 考生分配考场的简单实现