在两个数字之间生成随机数
Posted
技术标签:
【中文标题】在两个数字之间生成随机数【英文标题】:Generate random numbers between two numbers 【发布时间】:2011-09-15 07:53:17 【问题描述】:public class TestSample
public static void main(String[] args)
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
double ran = Math.random();
我不想使用Random r = new Random();
类。有没有其他方法可以生成随机数。我只是对可以应用什么逻辑来生成两个数字之间的随机数感到震惊。
【问题讨论】:
***.com/questions/363681/… 请问您为什么不想使用 Random 类? 不想使用Random
类?考虑改用这个:xkcd.com/221
***.com/questions/2872138/…> ***.com/questions/190135/…
【参考方案1】:
这真的很简单...您只需要弄清楚哪个是最小值以及两个数字之间的差异是多少(我们称之为diff
)。然后,您可以通过乘以diff
(现在它的范围在0
和diff
之间)来缩放Math.random 值(在0
和1
之间)。然后,如果您添加最小值,您的范围在min
和min + diff
之间(这是另一个值)
int min = min(a,b);
int max = max(a,b);
int diff = max - min;
int result = min + diff * Math.random();
【讨论】:
【参考方案2】:考虑使用此代码:
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
double ran = Math.random();
double random;
if(a < b)
random = (b-a)*ran + a;
else
random = (a-b)*ran + b;
如果您考虑使用负数,这将适用于 a >= 0 and b >= 0
,逻辑会发生轻微变化
【讨论】:
+1:您不需要检查哪个更大或它们是否为正。如果a
和b
分别是“1”和“5”,您将得到一个介于“1”和“5”或“5”和“1”之间的随机数,结果应该实际上是相同的。
是的,你说得对……因为这样差异就变成了负数,并减去了大的差异。懒得用负数测试行为……:p【参考方案3】:
如果您期待double
结果,最简单的方法是
int a =
int b =
double result = (a-b)*Math.random() + b;
当你获得相同的分布时,哪个更大并不重要。
但是,如果你想要一个介于 'a' 和 'b' 之间的随机整数,就有点复杂了。
int a =
int b =
int result = Math.floor((Math.abs(a-b)+1) * Math.random()) + Math.min(a, b);
结果不同的原因是 0 和 1 之间的随机双精度数将小于 1 即 [0.0, 1.0) 但是 1 和 6 之间的随机整数通常包括 1、2、3、4、5、 6个一样。作为小数,这是 [0.0 ... 7.0) 的向下舍入
【讨论】:
【参考方案4】:您可能会从麦克风中获得白噪声,并从那里获取任何数字。之后,您可以从给定的数据中获取任何数字,并按照您的意愿使用它。从麦克风获取数据的例子可以在here找到。
【讨论】:
以上是关于在两个数字之间生成随机数的主要内容,如果未能解决你的问题,请参考以下文章