Une méthode générique qui peut retourner un entier aléatoire entre 2 paramètres comme ruby le fait avec rand(0..n)
.
Une suggestion ?
Une méthode générique qui peut retourner un entier aléatoire entre 2 paramètres comme ruby le fait avec rand(0..n)
.
Une suggestion ?
Ma suggestion serait un extension fonction sur IntRange pour créer des aléas comme celui-ci : (0..10).random()
Depuis la version 1.3, Kotlin est livré avec son propre générateur de hasard multiplateforme. Il est décrit dans ce GARDER . L'extension décrite ci-dessous est maintenant partie de la bibliothèque standard de Kotlin il suffit de l'utiliser comme ceci :
val rnds = (0..10).random() // generated random from 0 to 10 included
Avant la version 1.3, sur la JVM, on utilise Random
ou même ThreadLocalRandom
si on est sur JDK > 1.6.
fun IntRange.random() =
Random().nextInt((endInclusive + 1) - start) + start
Utilisé comme ceci :
// will return an `Int` between 0 and 10 (incl.)
(0..10).random()
Si vous vouliez que la fonction ne renvoie que 1, 2, ..., 9
( 10
non inclus), utilisez une gamme construite avec until
:
(0 until 10).random()
Si vous travaillez avec JDK > 1.6, utilisez ThreadLocalRandom.current()
au lieu de Random()
.
KotlinJs et autres variantes
Pour kotlinjs et d'autres cas d'utilisation qui ne permettent pas l'utilisation de l'option java.util.Random
voir cette alternative .
Voir aussi réponse pour les variations de ma suggestion. Il comprend également une fonction d'extension pour les Char
s.
@SimonForsberg En effet. J'ai ajouté une autre réponse qui n'en fait pas usage : stackoverflow.com/a/49507413/8073652
Il existe également une proposition visant à ajouter un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG) ici : github.com/Kotlin/KEEP/issues/184
Si vous voulez obtenir un couple de rangées aléatoires Int
vous pouvez utiliser Random#int(taille,de,à) à la place dans java-8 .
Cette solution ne fonctionne pas sur Javascript / Native Kotlin. Il serait peut-être intéressant de créer une méthode plus générique pour faire cela :)
Vous pouvez créer un fonction d'extension similaire à java.util.Random.nextInt(int)
mais un qui prend un IntRange
au lieu d'un Int
pour sa limite :
fun Random.nextInt(range: IntRange): Int {
return range.start + nextInt(range.last - range.start)
}
Vous pouvez maintenant l'utiliser avec n'importe quel Random
instance :
val random = Random()
println(random.nextInt(5..9)) // prints 5, 6, 7, 8, or 9
Si vous ne voulez pas avoir à gérer votre propre Random
vous pouvez alors définir une méthode de commodité en utilisant, par exemple, l'option suivante, ThreadLocalRandom.current()
:
fun rand(range: IntRange): Int {
return ThreadLocalRandom.current().nextInt(range)
}
Vous pouvez maintenant obtenir un entier aléatoire comme vous le feriez en Ruby sans avoir à déclarer au préalable un fichier Random
Installez-vous :
rand(5..9) // returns 5, 6, 7, 8, or 9
Variation possible de mon autre réponse pour les caractères aléatoires
Afin d'obtenir des données aléatoires Char
vous pouvez définir une fonction d'extension comme suit
fun ClosedRange<Char>.random(): Char =
(Random().nextInt(endInclusive.toInt() + 1 - start.toInt()) + start.toInt()).toChar()
// will return a `Char` between A and Z (incl.)
('A'..'Z').random()
Si vous travaillez avec JDK > 1.6, utilisez ThreadLocalRandom.current()
au lieu de Random()
.
Pour kotlinjs et d'autres cas d'utilisation qui ne permettent pas l'utilisation de l'option java.util.Random
, cette réponse vous aidera.
Depuis la version 1.3, Kotlin dispose de son propre générateur de hasard multiplateforme. Il est décrit dans ce GARDER . Vous pouvez maintenant utiliser directement l'extension comme partie intégrante de la bibliothèque standard de Kotlin sans la définir :
('a'..'b').random()
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.