用数学的方法证明利用Random工具取区间[a,b)内随机数的算法

经常在网上看到一种用Java的Random工具取某个区间[a,b)内随机数的算法 random.nextInt(b-a)+a,琢磨了一下,想了个数学的方法来证明它,在这里标记备份一下。

已知:random.nextInt(n) 可以取到[0,n)之间的随机数

目标:取[a,b)间的随机数

证明过程:

因为:random.nextInt(n) =〉 [0,n)

所以:random.nextInt(x)+y =〉[0+y,x+y) = [y,x+y)

令:a=y,b=x+y

则:b=a+x =〉 x=b-a

所以:random.nextInt(b-a)+a 〈=〉 random.nextInt(x)+y

所以:random.nextInt(b-a)+a =〉[y,x+y)〈=〉[a,b)

所以得证。

证明过程很简单,主要思想是等价代换,思考的时候要用到分析法,即从目标到条件一步步接近。

下面是代码表示的算法:

/**
	 * 在区间[start,end)之间取随机数
	 * @param start 起始数(含)
	 * @param end 终止数(不含)
	 * @return 取到的随机数
	 */
	public final static int random(int start,int end){
		final Random aRandom=new Random();
		return aRandom.nextInt(end-start)+start;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值