有一种通用的方法可以返回两个参数之间的随机整数,就像 Ruby 中使用 rand(0..n)
一样。
有什么建议吗?
从1.3版本开始,标准库提供了多平台支持的随机数功能,详情请参见此回答。
如果你在使用 Kotlin JavaScript,并且没有访问java.util.Random
的权限,可以使用以下方法:
fun IntRange.random() = (Math.random() * ((endInclusive + 1) - start) + start).toInt()
使用方法如下:
// will return an `Int` between 0 and 10 (incl.)
(0..10).random()
random()
。val list = listOf(3, 1, 4, 5)
val number = list.random()
fun rand(s: Int, e: Int) = Random.nextInt(s, e + 1)
使用方法:
rand(1, 3) // returns either 1, 2 or 3
java.util.Random
使用的算法。如果您想使用它,请跟随此链接:
https://gist.github.com/11e5ddb567786af0ed1ae4d7f57441d4
我的实现目的是为您提供nextInt(range: IntRange)
。Random.nextInt()
目前还没有标准方法可以实现这个功能,但您可以使用Math.random()
或类java.util.Random
轻松创建自己的方法。以下是使用Math.random()
方法的示例:
fun random(n: Int) = (Math.random() * n).toInt()
fun random(from: Int, to: Int) = (Math.random() * (to - from) + from).toInt()
fun random(pair: Pair<Int, Int>) = random(pair.first, pair.second)
fun main(args: Array<String>) {
val n = 10
val rand1 = random(n)
val rand2 = random(5, n)
val rand3 = random(5 to n)
println(List(10) { random(n) })
println(List(10) { random(5 to n) })
}
[9, 8, 1, 7, 5, 6, 9, 8, 1, 9]
[5, 8, 9, 7, 6, 6, 8, 6, 7, 9]
java.util.Random
。您需要创建其实例,然后调用 random.nextInt(n)
。import java.util.concurrent.ThreadLocalRandom
fun randomInt(rangeFirstNum:Int, rangeLastNum:Int) {
val randomInteger = ThreadLocalRandom.current().nextInt(rangeFirstNum,rangeLastNum)
println(randomInteger)
}
fun main() {
randomInt(1,10)
}
// Result – random Int numbers from 1 to 9
以下的 Kotlin 代码对我很有效:
(fromNumber.rangeTo(toNumber)).random()
fromNumber
开始,以变量toNumber
结束。在此范围内生成的随机数将包括fromNumber
和toNumber
。这里有一个简单的 Kotlin 解决方案,也适用于 KMM:
fun IntRange.rand(): Int =
Random(Clock.System.now().toEpochMilliseconds()).nextInt(first, last)
种子在每次运行时需要不同的随机数。您也可以对LongRange执行相同的操作。