一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
当前回答
Kotlin >= 1.3,多平台随机支持
从1.3开始,标准库就为随机提供了多平台支持。
JavaScript上的Kotlin < 1.3
如果您正在使用Kotlin JavaScript,并且无法访问java.util。随机,以下将工作:
fun IntRange.random() = (Math.random() * ((endInclusive + 1) - start) + start).toInt()
这样用:
// will return an `Int` between 0 and 10 (incl.)
(0..10).random()
其他回答
使用顶级函数,你可以实现与Ruby中完全相同的调用语法(如你所愿):
fun rand(s: Int, e: Int) = Random.nextInt(s, e + 1)
用法:
rand(1, 3) // returns either 1, 2 or 3
可能的变化,我的其他答案随机字符
为了获得随机字符,可以像这样定义一个扩展函数
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()
如果您使用的是JDK > 1.6,请使用ThreadLocalRandom.current()而不是Random()。
对于kotlinjs和其他不允许使用java.util的用例。随机,这个答案会有帮助。
Kotlin >= 1.3多平台随机支持
在1.3版本中,Kotlin自带多平台随机生成器。在KEEP中有描述。你现在可以直接使用扩展作为Kotlin标准库的一部分,而不需要定义它:
('a'..'b').random()
在from(含)和to(不含)之间生成一个随机整数
import java.util.Random
val random = Random()
fun rand(from: Int, to: Int) : Int {
return random.nextInt(to - from) + from
}
在Kotlin SDK >=1.3中,你可以这样做
import kotlin.random.Random
val number = Random.nextInt(limit)
成为超级高手))
fun rnd_int(min: Int, max: Int): Int {
var max = max
max -= min
return (Math.random() * ++max).toInt() + min
}