一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
当前回答
从随机数生成器获取下一个随机Int。
Random.nextInt()
其他回答
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
完整的源代码。可以控制是否允许复制。
import kotlin.math.min
abstract class Random {
companion object {
fun string(length: Int, isUnique: Boolean = false): String {
if (0 == length) return ""
val alphabet: List<Char> = ('a'..'z') + ('A'..'Z') + ('0'..'9') // Add your set here.
if (isUnique) {
val limit = min(length, alphabet.count())
val set = mutableSetOf<Char>()
do { set.add(alphabet.random()) } while (set.count() != limit)
return set.joinToString("")
}
return List(length) { alphabet.random() }.joinToString("")
}
fun alphabet(length: Int, isUnique: Boolean = false): String {
if (0 == length) return ""
val alphabet = ('A'..'Z')
if (isUnique) {
val limit = min(length, alphabet.count())
val set = mutableSetOf<Char>()
do { set.add(alphabet.random()) } while (set.count() != limit)
return set.joinToString("")
}
return List(length) { alphabet.random() }.joinToString("")
}
}
}
首先,您需要一个RNG。在Kotlin中,您目前需要使用特定于平台的工具(没有内置的Kotlin)。对于JVM,它是java.util.Random。你需要创建它的一个实例,然后调用random.nextInt(n)。
在from(含)和to(不含)之间生成一个随机整数
import java.util.Random
val random = Random()
fun rand(from: Int, to: Int) : Int {
return random.nextInt(to - from) + from
}