如何生成随机 int
特定范围内的值?
我尝试了以下方法,但这些方法不起作用:
尝试1:
randomNum = minimum + (int)(Math.random() * maximum);
缺陷: randomNum
可以大于 maximum
.
尝试2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
缺陷: randomNum
可以小于 minimum
.
30条答案
按热度按时间jslywgbw1#
在掷骰子的情况下,它将是1到6(不是0到6)之间的随机数,因此:
tjrkku2a2#
请注意,这种方法比传统方法更偏颇,效率更低
nextInt
接近,https://stackoverflow.com/a/738651/360211实现这一点的一个标准模式是:
java数学库函数math.random()生成一个范围内的双精度值
[0,1)
. 请注意,此范围不包括1。为了首先得到一个特定的值范围,需要乘以要覆盖的值范围的大小。
这将返回范围内的值
[0,Max-Min)
,其中不包括“max min”。例如,如果你想
[5,10)
,您需要覆盖五个整数值,以便使用这将返回范围内的值
[0,5)
,其中不包括5。现在你需要把这个范围移到你的目标范围。您可以通过添加最小值来实现这一点。
您现在将获得范围内的值
[Min,Max)
. 以我们为例,这意味着[5,10)
:但是,这还不包括
Max
你得到了一个双倍的值。为了得到Max
如果包含值,则需要在range参数中添加1(Max - Min)
然后通过强制转换为int来截断小数部分。这是通过以下方式实现的:就在这里。范围内的随机整数值
[Min,Max]
,或根据示例[5,10]
:uujelgoq3#
您可以在java 8中简明扼要地实现这一点:
btqmn9zl4#
这种方法使用起来可能很方便:
此方法将返回所提供的最小值和最大值之间的随机数:
此方法将从提供的最小值和最大值中返回一个随机数(因此生成的数字也可以是最小值或最大值):
kx5bkwkv5#
我想知道apachecommons数学库提供的任何随机数生成方法是否符合要求。
例如:
RandomDataGenerator.nextInt
或者RandomDataGenerator.nextLong
evrscar26#
wd2eg0qa7#
最好使用securerandom,而不仅仅是random。
avkwfej48#
我用这个:
如果需要,可以将其转换为整数。
wecizke39#
只需使用随机类:
uelo1irk10#
3hvapo4f11#
或者看看apache commons中的randomutils。
gupuwyp212#
下面是一个简单的示例,演示如何从闭合的
[min, max]
范围,而min <= max is true
您可以在hole类中将其作为字段重用,同时还具有Random.class
方法在一个地方结果示例:
资料来源:
pxiryf3j13#
您可以将第二个代码示例编辑为:
t1rydlwq14#
从Java7开始,您不应该再使用
Random
. 对于大多数用途,随机数发生器的选择是现在ThreadLocalRandom
.对于fork-join池和并行流,使用
SplittableRandom
.约书亚·布洛赫。有效的java。第三版。
从Java8开始
对于fork-join池和并行流,使用
SplittableRandom
这通常是更快,有更好的统计独立性和均匀性的性质相比Random
.生成一个随机的
int
在范围内[0, 1_000]:
```int n = new SplittableRandom().nextInt(0, 1_001);
要返回随机值流,请执行以下操作:
xurqigkl15#
下面是一个生成随机变量的有用类
ints
在包含/排除边界的任意组合的范围内: