web-dev-qa-db-fra.com

Obtenir un nombre aléatoire entre deux nombres dans Scala

Comment puis-je obtenir un nombre aléatoire entre deux nombres, par exemple 20 à 30?

J'ai essayé:

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

Cela autorise uniquement la valeur de limite supérieure, mais les valeurs commencent toujours par 0. Existe-t-il un moyen de définir la valeur de limite inférieure (à 20 dans l'exemple)?

Merci!

13
vijay

Vous pouvez utiliser ci-dessous. Le début et la fin seront inclusifs.

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

Dans ton cas

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

Sûr. Il suffit de faire 

20 + r. nextInt(10)
16
egprentice

Ajustez également la valeur math.random comprise entre 0 et 1 en fonction de l'intervalle d'intérêt, puis convertissez la variable Double dans ce cas en Int, par ex.

(math.random * (30-20) + 20).toInt
3
elm

Démarrer Scala 2.13, scala.util.Random fournit:

def between(minInclusive: Int, maxExclusive: Int): Int

qui, utilisé comme suit, génère une Int entre 20 (inclus) et 30 (exclu):

import scala.util.Random
Random.between(20, 30) // in [20, 30[
2
Xavier Guihot

Vous pouvez utiliser Java.util.concurrent.ThreadLocalRandom en tant qu'option. C'est préférable dans les environnements multithread.

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