Get random number between two numbers in Scala
54,442
Solution 1
You can use below. Both start and end will be inclusive.
val start = 20
val end = 30
val rnd = new scala.util.Random
start + rnd.nextInt( (end - start) + 1 )
In your case
val r = new scala.util.Random
val r1 = 20 + r.nextInt(( 30 - 20) + 1)
Solution 2
Starting Scala 2.13
, scala.util.Random
provides:
def between(minInclusive: Int, maxExclusive: Int): Int
which used as follow, generates an Int
between 20 (included) and 30 (excluded):
import scala.util.Random
Random.between(20, 30) // in [20, 30[
Solution 3
Sure. Just do
20 + r. nextInt(10)
Solution 4
You can use java.util.concurrent.ThreadLocalRandom as an option. It's preferable in multithreaded environments.
val random: ThreadLocalRandom = ThreadLocalRandom.current()
val r = random.nextLong(20, 30 + 1) // returns value between 20 and 30 inclusively
Solution 5
Also scaling math.random
value which ranges between 0
and 1
to the interval of interest, and converting the Double
in this case to Int
, e.g.
(math.random * (30-20) + 20).toInt
Author by
vijay
Updated on December 05, 2020Comments
-
vijay over 3 years
How do I get a random number between two numbers say 20 to 30?
I tried:
val r = new scala.util.Random r.nextInt(30)
This allows only upper bound value, but values always starts with 0. Is there a way to set lower bound value (to 20 in the example)?
Thanks!