考生分配考场的简单实现

考生分配考场的简单实现

    • 前言
    • demo逻辑
    • 代码实现

前言

前段时间有小学弟咨询我考生分配考场的逻辑该怎么做,简单讲解了一下,在这里顺便记录下

demo逻辑

	1. 循环班级数组  A
	2. 循环每班总座位  B
	3. 在B中按照顺序给每个位置分配上  通过随机数取到的随机学号
	4. 打印输出
	PS:重点要保证3不能重复

代码实现

我做的是个非常简单的demo,班级个数和每班人数都是固定的。当然实际生活中可能不是固定的,就需要根据实际情况去优化了

	@Test
	public void test1126()
	{
		int banji = 10;//班级个数
		int renShu = 50;//每班座位数
		int renShuTotal = banji * renShu;//待分配座位总数
		/**
		* 生成随机的学号list,放在set里没有重复
		* 实际情况:该元素应从数据库中查出,且不可能出现重复
		*/
		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("********************************************");}
	
	/**
	 *	获取500以内的随机数,这里用了递归,以保证不会重复
	*/
	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;
	}

	/**
		*获取随机学号,*1000000000用来保证重复几率最小
		*/
	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;
	}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻凡ss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值