在Scala中获取两个数字之间的随机数

a6b3iqyw  于 2022-12-29  发布在  Scala
关注(0)|答案(6)|浏览(281)

我怎样才能在两个数字之间得到一个随机数,比如20到30?
我试过:

val r = new scala.util.Random
r.nextInt(30)

这只允许上限值,但值总是从0开始。有没有办法设置下限值(在示例中为20)?
谢谢!

bfhwhh0e

bfhwhh0e1#

Scala 2.13开始,scala.util.Random提供:
def between(minInclusive: Int, maxExclusive: Int): Int
如下所示,生成20(含)和30(不含)之间的Int

import scala.util.Random
Random.between(20, 30) // in [20, 30[
rmbxnbpk

rmbxnbpk2#

您可以使用下面的。开始和结束都包括在内。

val start = 20
val end   = 30
val rnd = new scala.util.Random
start + rnd.nextInt( (end - start) + 1 )

就你而言

val r = new scala.util.Random
val r1 = 20 + r.nextInt(( 30 - 20) + 1)
33qvvth1

33qvvth13#

好啊。就这么做吧

20 + r. nextInt(10)
lyr7nygr

lyr7nygr4#

您可以使用java.util.concurrent.ThreadLocalRandom作为一个选项,它在多线程环境中更可取。

val random: ThreadLocalRandom = ThreadLocalRandom.current()
val r = random.nextLong(20, 30 + 1) // returns value between 20 and 30 inclusively
f87krz0w

f87krz0w5#

同样,将范围在01之间的math.random值缩放到感兴趣的间隔,并且在这种情况下将Double转换为Int,例如

(math.random * (30-20) + 20).toInt
r3i60tvu

r3i60tvu6#

我建议使用Random.between(a, b)
请注意,a包含在内,b不包含在内。
请参阅此处的文档。

val r = new scala.util.Random

  // get 10 random numbers between 20 and 30 inclusive
  (1 to 10).foreach(x => println(r.between(20, 30+1)))

产出

28
26
29
30
22
29
28
22
20
24

Process finished with exit code 0

相关问题