Kotlin - 乱数生成(Random、SecureRandom)

鼻間違ったから乱数の生成方法を紹介します。

Math.random()

Math.random()0 <= n < 1範囲の数字(Double)をランダムに生成します。

fun main(args: Array<String>){

    println(Math.random())  // 0 <= n < 1

    println(Math.random())

    println(Math.random())
}

Output:

0.8510430769472556
0.30969568684879034
0.44610616095278166

Range.random()

任意の数の範囲が定義されたRangeオブジェクトの random()メソッドを呼び出すと、その範囲の乱数が返されます。

fun main(args: Array<String>){

    val range = (1..15)  // 1 <= n <= 15
    println(range.random())
    println(range.random())

    val random = (1..20).random()  // 1 <= n <= 20
    println(random)
}

Output:

4
13
7

ThreadLocalRandom

ThreadLocalRandomを利用して、指定した範囲の乱数Int、Double、Longを生成することができます。

import java.util.concurrent.ThreadLocalRandom

fun main(args: Array<String>){

    val randomDouble = ThreadLocalRandom.current().nextDouble(1.0, 10.0)
    val randomInteger = ThreadLocalRandom.current().nextInt(1, 10)
    val randomLong = ThreadLocalRandom.current().nextLong(1, 10)

    println(randomDouble)  // 1 <= n < 10.0
    println(randomInteger)  // 1 <= n < 10
    println(randomLong)  // 1 <= n < 10
}

Output:

1.7703291471753246
6
8

SecureRandom

上で紹介し方法は、所定のパターンでランダム番号を生成します。そのため、パターンを見つけて生成された数字を予測することができます。

SecureRandomは予測が不可能な乱数を生成してSecurity面でお勧めします。

import java.security.SecureRandom

fun main(args: Array<String>){

    val secureRandom = SecureRandom()

    println(secureRandom.nextInt(100))  // 0 <= n < 100
    println(secureRandom.nextDouble())
}

Output:

import java.security.SecureRandom

fun main(args: Array<String>){

    val secureRandom = SecureRandom()

    println(secureRandom.nextInt(100))  // 0 <= n < 100
    println(secureRandom.nextDouble())
}
codechachaCopyright ©2019 codechacha