JAVA:随机生成具有概率的整数

时间:2015-10-27 03:30:40

标签: java probability

如果数字范围从(1100,如何从(30%1)随机生成整数,例如50 ),如果数字范围从(70%50),概率为100

int integer = new Random().nextInt(100) + 1;

// Probabilities
   ..... code here ....

我该怎么做?

3 个答案:

答案 0 :(得分:4)

这是一种方法getRandom(),它返回符合您指定条件的单个随机数。它实际上使用09之间的随机数来确定要使用的两个范围中的哪一个。

public int getRandom() {
    Random random = new Random();
    int val = random.nextInt(10);

    if (val < 3) {
        return random.nextInt(50) + 1;      // random range 1 to 50
    }
    else {
        return random.nextInt(51) + 50;     // random range 50 to 100
    }
}

答案 1 :(得分:1)

这是一个通用解决方案,它将返回任意数量的事件之一,您可以在其中指定事件的相对权重。权重可能是概率,但它们不必;它们不必加起来为1.例如,如果您有三个事件,并且您希望第一个事件的概率为20%,第二个事件为30%,第三个事件为50%,则可以调用{{1}在每个事件上,2,3和5作为第二个参数,或20,30和50,或0.2,0.3和0.5,或具有这些比率的任何其他数字组合。对于您的情况,您可以将泛型参数设为间隔,并添加权重为3和7(或30和70,或其他)的两个事件;然后,当您致电addEvent并返回包含端点randomEventm 包含的时间间隔时,您会在该时间间隔内生成另一个随机数:

n

其中value = m + random.nextInt(n - m + 1); 是您自己的random实例。

Random

答案 2 :(得分:1)

您可以使用MockNeat probabilities()方法。

String s = mockNeat.probabilites(String.class)
                .add(0.1, "A")
                .add(0.2, "B")
                .add(0.5, "C")
                .add(0.2, "D")
                .val();

上面的示例将生成概率为10%的“ A”,生成概率为20%的B,依此类推。

Integer x = m.probabilites(Integer.class)
         .add(0.2, m.ints().range(0, 100))
         .add(0.5, m.ints().range(100, 200))
         .add(0.3, m.ints().range(200, 300))
         .val();

上面的示例将生成概率为20%的[0,100)范围内的数字,概率为50%的[100,200)范围内的数字和[200,300)范围为30内的数字%概率。

免责声明:我是该库的作者,因此当我推荐该库时可能会有所偏见。