一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
一个泛型方法,可以返回两个参数之间的随机整数,就像ruby对rand(0..n)所做的那样。
任何建议吗?
当前回答
使用顶级函数,你可以实现与Ruby中完全相同的调用语法(如你所愿):
fun rand(s: Int, e: Int) = Random.nextInt(s, e + 1)
用法:
rand(1, 3) // returns either 1, 2 or 3
其他回答
每当有一种情况,你想要生成密钥或mac地址,这是基于用户需求的十六进制数字,这也是使用android和kotlin,然后你我下面的代码帮助你:
private fun getRandomHexString(random: SecureRandom, numOfCharsToBePresentInTheHexString: Int): String {
val sb = StringBuilder()
while (sb.length < numOfCharsToBePresentInTheHexString) {
val randomNumber = random.nextInt()
val number = String.format("%08X", randomNumber)
sb.append(number)
}
return sb.toString()
}
在from(含)和to(不含)之间生成一个随机整数
import java.util.Random
val random = Random()
fun rand(from: Int, to: Int) : Int {
return random.nextInt(to - from) + from
}
我的建议是在IntRange上创建一个扩展函数,像这样创建随机(0..10).random()
TL;DR Kotlin >= 1.3,一个随机的所有平台
在1.3版本中,Kotlin自带多平台随机生成器。在KEEP中有描述。下面描述的扩展现在是Kotlin标准库的一部分,简单地像这样使用它:
val rnds = (0..10).random() // generated random from 0 to 10 included
三
在1.3之前,在JVM上我们使用Random,如果我们在JDK > 1.6上,我们甚至使用ThreadLocalRandom。
fun IntRange.random() =
Random().nextInt((endInclusive + 1) - start) + start
这样用:
// will return an `Int` between 0 and 10 (incl.)
(0..10).random()
如果你想让函数只返回1,2,…, 9(不包括10),使用until构造的范围:
(0 until 10).random()
如果您使用的是JDK > 1.6,请使用ThreadLocalRandom.current()而不是Random()。
KotlinJs和其他变体
对于kotlinjs和其他不允许使用java.util的用例。随机的,看这个选项。
另外,看看我的建议的变化。它还包括一个用于随机字符的扩展函数。
成为超级高手))
fun rnd_int(min: Int, max: Int): Int {
var max = max
max -= min
return (Math.random() * ++max).toInt() + min
}
从随机数生成器获取下一个随机Int。
Random.nextInt()