随机数只有几次

时间:2019-03-01 05:50:21

标签: java

我如何在x%的时间内获得随机数

int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);

y乘以y%的数字大于10。

也许微不足道,但我找不到简单的解决方案 谢谢你的帮助 ! :)

2 个答案:

答案 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%,否则您将一无所有,但随着时间的流逝,准确性会提高。