java 使用Random产生规定区间内的随机数
都知道可以使用java.util.Random 产生一个随机数。通过指定参数,使得产生一个小于次数的随机数。值的范围为:[ 0, Max) ; 其中Max 就是指定的参数。但是业务需求想产生一个 [ 10, 100]; 内的随机数怎么产生呢。这个问题极其了我的兴趣。
其实他是个二元一次方程。通过解方程,得到了他的公式,下面是我推导的公式。
【Min, Max】= random(Max – Min +1) + Min 推导过程
题目:已知random方法能返回一个【0, Max-1】左闭右闭的随机数。其中Max是个确定值, 即:【0, Max-1】= random(Max)
求random返回一个固定范围的左闭右闭的随机数。即:求解【Min, Max】= random(x) + y 中的x , y。即求【Min, Max】= random(x) + y中的x, y。
解:分析题意:由题意:【0, Max-1】= random(Max)
可将x未知数带入得(1);题意中问题也是一个恒等式。这样就得到了两个等式。两个未知数。这样就能得到答案。
(1): 由题意得恒等式(1):【0, x-1】 = random(x)
(2): 由题意得恒等式(2):【Min, Max】= random(x) + y
(3): 将(1)带入(2)得 如下式子
【Min, Max】= 【0, x-1】+ y
(4): 由(3)知道:两个区间相等, 则两个区间的首位必相等。得如下式子:
(5) y = Min;
(6): Max = x – 1 +y
(7): 由(5), (6)得到x, y,的值为
(8): y = Min
(9): x = Max – Min +1
(10): 得答案:【Min, Max】= random(Max – Min +1) + Min