获取指定个数指定范围的随机数

236 篇文章 0 订阅

我有这样的需求:

我有100道试题,id是0到99,我想从中找出20道试题组成一个试卷,要求试题不重复,打乱顺序:

/**
	 * 产生无重复的随机数    sumInt:总样本 (0....sumInt-1)
	 * resultSum: 产生的随机数个数
	 * 
	 * @return
	 */
	public static int[] randoms(int sumInt, int resultSum) {
		Random r = new Random();

		int temp1, temp2;
		
		//Total sample
		int send[] = new int[sumInt];//0....(sumInt-1)
		for (int i = 0; i < sumInt; i++) {
			send[i] = i;
		}
		int len = send.length;//The length of the total sample
		int returnValue[] = new int[resultSum];//Random number to return
		for (int i = 0; i < resultSum; i++) {
			temp1 = Math.abs(r.nextInt()) % len;
			temp2 = send[temp1];
			returnValue[i] = temp2;
			if (temp1 != len - 1) {
				send[temp1] = send[len - 1];
				send[len - 1] = temp2;
			}
			len--;
		}
		return returnValue;
	}

 

测试:

public static void printArray(int[] ints) {

for (int i = 0; i < ints.length; i++) {

System.out.print(ints[i]);

if (i < ints.length - 1) {

System.out.print(" ,");

}

}

System.out.println();

}

 

@Test

public void test_randoms(){

printArray(SystemUtil.randoms(5, 3));

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值