我如何在x%的时间内获得随机数
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
y乘以y%的数字大于10。
也许微不足道,但我找不到简单的解决方案 谢谢你的帮助 ! :)
答案 0 :(得分:2)
通常,您使用随机数生成器。其中大多数返回间隔为[0,1]的数字,因此您将检查该数字是否小于等于x(百分比/机会)。以下是示例代码
double x=0.1;
if( Math.random() <= x ) {
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
}
在这里,我选择x的机率是10%,即0.1。因此在10%的情况下,您将获得一个随机数。反之亦然,也可以按照您的要求进行操作
答案 1 :(得分:1)
您要随机应用x
还是确定性应用?
随机变体:
如果您希望x
也是随机的,则可以生成一个随机值:
int percent = ThreadLocalRandom.current().nextInt(1, 100);
if (percent < x) {
// ...get the actual random value.
}
percent
应该在1到100之间,因此您恰好有100个可能的值。如果包含0
,则为101。然后进行百分比检查。如果百分比在x
之外(大于),则x
太小。因此,您得到false
,否则得到true
。从那里可以处理if
-条件。
确定性变体:
如果是确定性的,则取决于您的首选行为。例如,您可以使用一个计数器,每当超过100时,您都会“突破”并返回true:
// object attribute.
private Integer accumulator = 0;
// in method (should be synchronized, at least on accumulator, if you use multithreading):
accumulator += x;
boolean overflow = false;
if (accumulator >= 100) {
overflow = true;
accumulator %= 100; // this applies modulo 100 to accumulator.
}
if (overflow) {
// ...get the actual random value.
}
这样,您调用的方法越多,您将获得x
的百分之true
。一开始,除非100%,否则您将一无所有,但随着时间的流逝,准确性会提高。