今回は、Kotlin で乱数を生成する方法を紹介します。
Math を使用した乱数
Math.random() で、0以上1未満の double 型の値をランダムに生成することができます。
val randomNum = Math.random() // 0.0 <= randomNum < 1.0
println(randomNum)
println(randomNum)
実行結果例
0.023621748864149916
0.6917943501723727
Range を使用した乱数
random() で生成
(最小値..最大値)の形で Range を指定して random() を使用すると、最小値以上、最大値以下の範囲で整数乱数を生成することができます。 この方法が一番使われているのではないかと思います。
val range = (10..20)
println(range.random()) // 10 <= range.random() <= 20
val randomNum = (15..30).random()
println(randomNum) // 15 <= randomNum <= 30
実行結果例
19
27
shuffled() と first() で生成
指定した範囲の数字をシャッフルしてから、最初の要素を取り出すことで、整数乱数を生成することもできます。
val randomNum = (5..15).shuffled().first()
println(randomNum) // 5 <= randomNum <= 15
実行結果例
11
ThreadLocalRandom を使用した乱数
ThreadLocalRandom を使用することで、様々な型に応じて指定した範囲の値をランダムに生成できます。以下の例では、double、int を取り上げていますが、nextFloat() や nextLong() に変えることで、float や long もランダム生成できます。
import java.util.concurrent.ThreadLocalRandom
val randomDouble = ThreadLocalRandom.current().nextDouble(5.0, 10.0)
val randomInteger = ThreadLocalRandom.current().nextInt(10, 20)
println(randomDouble) // 5.0 <= randomDouble < 10.0
println(randomInteger) // 10 <= randomInteger < 20
実行結果例
9.149660747121175
10
SecureRandom を使用した乱数
SecureRandom を使用することで、生成パターンから次の乱数を予測できないセキュアな乱数を生成することができます。ThreadLocalRandom と同様、float や long の値でもランダム生成できます。
import java.security.SecureRandom
val secureRandom = SecureRandom()
println(secureRandom.nextDouble())
println(secureRandom.nextInt(10)) // 0 <= secureRandom.nextInt(10) < 10
実行結果例
0.29337629427242584
8
まとめ
今回は、Kotlin で乱数を生成する方法を紹介しました!
- 乱数生成方法は、以下の5種類あります。
- Math.random()
- Range.random()
- Range.shuffled().first()
- ThreadLocalRandom
- SecureRandom
以上で、【Kotlin】乱数の生成の仕方 は終わりです。
おすすめ書籍
Kotlinイン・アクション
posted with ヨメレバ
Dmitry Jemerov/Svetlana Isakova マイナビ出版 2017年10月31日頃
コメント