【问题标题】: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(); 类。有没有其他方法可以生成随机数。我只是对可以应用什么逻辑来生成两个数字之间的随机数感到震惊。

【问题讨论】:

标签: java algorithm random


【解决方案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找到。

      【讨论】:

        猜你喜欢
        • 2014-12-19
        • 2014-10-02
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        相关资源
        最近更新 更多