如果数字范围从(1
到100
,如何从(30%
到1
)随机生成整数,例如50
),如果数字范围从(70%
到50
),概率为100
?
int integer = new Random().nextInt(100) + 1;
// Probabilities
..... code here ....
我该怎么做?
答案 0 :(得分:4)
这是一种方法getRandom()
,它返回符合您指定条件的单个随机数。它实际上使用0
和9
之间的随机数来确定要使用的两个范围中的哪一个。
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
并返回包含端点randomEvent
和m
包含的时间间隔时,您会在该时间间隔内生成另一个随机数:
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内的数字%概率。
免责声明:我是该库的作者,因此当我推荐该库时可能会有所偏见。