在两个数字之间生成随机数

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(现在它的范围在0diff 之间)来缩放Math.random 值(在01 之间)。然后,如果您添加最小值,您的范围在minmin + 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 &gt;= 0 and b &gt;= 0,逻辑会发生轻微变化

【讨论】:

+1:您不需要检查哪个更大或它们是否为正。如果ab 分别是“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找到。

【讨论】:

以上是关于在两个数字之间生成随机数的主要内容,如果未能解决你的问题,请参考以下文章

在两个变量jquery之间生成随机数[重复]

蒙蒂霍尔悖论 - 随机生成的数字与前两个不同

Python:在x和y之间生成随机数,它是5的倍数[重复]

如何使用 Java 生成 1 到 6 之间的 6 个随机数?

php中如何生成1-15之间的随机数?

生成 [-2, 2] 之间的随机 X.XXX 数字