如何在 Kotlin 中获取随机数:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

随机并非混乱:Kotlin 如何解决 Stack Overflow 上的问题

\n\n

每个开发者一生中至少编写过一次生成随机数的代码。看起来能有多难?但当这个问题在 Stack Overflow 上被提出(问题 "How can I get a random number in Kotlin?" 获得了数千次浏览),很明显:暗礁比看起来要多。特别是当您从 Java 或 Python 迁移过来时。

\n\n

在本文中,我们将从简单到高级技术详细讲解 Kotlin 中的随机数生成。您将学习如何获取随机整数、小数、如何设置范围,甚至如何为安全目的生成加密安全的随机数。开始吧!

\n\n

基础:Kotlin 中的 Random

\n\n

Kotlin 没有自己独立的 random 类——它使用了来自 Java 的强大 java.util.Random,但语法更加方便。得益于扩展函数,编写 Kotlin random 代码几乎可以在一行内完成。

\n\n

最简单的方法:Random.nextInt()

\n\n

如果您只需要一个随机整数(从 0 到 Int 的最大值),请使用:

\n\n
import kotlin.random.Random\n\nfun main() {\n    val randomNumber = Random.nextInt()\n    println("随机数:$randomNumber")\n}
\n\n

每次运行都会产生一个新值。但更常见的是我们需要限制范围。为此有一个重载版本:

\n\n
val fromZeroToTen = Random.nextInt(10)   // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14
\n\n
重要提示: 在 Kotlin 中,与 Java 一样,上限 不包含。Random.nextInt(10) 将返回 0 到 9 之间的数字。
\n\n

小数:Random.nextDouble() 和 Random.nextFloat()

\n\n

要生成 Kotlin 中的随机 float 或 double,请使用:

\n\n
val randomDouble = Random.nextDouble()   // 0.0..1.0\nval randomFloat = Random.nextFloat()     // 0.0..1.0\n\n// 带范围:\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0
\n\n

请注意:nextFloat() 不支持范围——只有 nextDouble() 支持。如果需要在范围内使用 float,请进行转换:

\n\n
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()
\n\n

在范围内生成随机数:实际示例

\n\n

在实际项目中,最常见的是需要 Kotlin 中给定范围内的随机数。让我们分析最流行的场景。

\n\n

从 1 到 100 的随机整数(包含)

\n\n

要包含上限,只需加 1:

\n\n
val diceRoll = Random.nextInt(1, 7)  // 1..6(像骰子)\nval lottery = Random.nextInt(1, 101) // 1..100
\n\n

数组或列表的随机索引

\n\n

最常见的任务之一是从集合中获取随机元素:

\n\n
val colors = listOf("红色", "蓝色", "绿色", "黄色")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("随机颜色:$randomColor")
\n\n

但在 Kotlin 中,还有一种更优雅的方法——random() 函数:

\n\n
val randomColor = colors.random()\nprintln("随机颜色:$randomColor")
\n\n

在底层,它执行相同的操作,但代码变得更简洁。

\n\n

带步长的随机数

\n\n

有时需要生成某个值的倍数。例如,0 到 100 之间的偶数:

\n\n
fun randomEven(max: Int): Int {\n    val half = max / 2\n    return Random.nextInt(0, half + 1) * 2\n}\n\nprintln(randomEven(100)) // 0, 2, 4, ..., 100
\n\n

高级技术:序列和加密安全性

\n\n

随机数序列

\n\n

如果需要生成随机数列表,请使用 generate

博客

书籍推荐