在 Kotlin 中获取随机数
随机数是使用一种算法从一组数字中生成的,该算法可确保每个数字的生成概率相等。
除了数字之外,我们还可以生成不同类型的数据类型。 例如,我们可以使用 java.util 的 UUID.randomUUID() 方法来生成一个随机字符串。
这种允许开发人员生成随机字符串的功能非常重要,因为它有助于为数据生成唯一标识符、生成唯一密码以及在电子商务环境中生成订单跟踪标识符。
本教程将演示我们如何利用 Kotlin 生成随机数。
在Kotlin中使用IntRange的random()扩展函数
扩展函数是一种在不修改现有代码或使用装饰器模式等设计模式的情况下向类添加功能的方法。
转到 IntelliJ 开发环境并选择文件 > 新建 > 项目。 在打开的窗口中,输入项目名称 kotlin-random,在 Language 部分选择 Kotlin,在 Build System 部分选择 Intellij,最后按 Create 按钮生成一个新项目。
在 Kotlin 中使用包含范围的 random()
在kotlin文件夹下新建一个Main.kt文件,将以下代码复制粘贴到文件中。
fun exampleOne(): Int{
return (0..10).random();
}
fun main(){
println("... Example One ...")
println(exampleOne());
}
在这段代码中,我们创建了一个名为 exampleOne()
的方法,它返回一个 Int。 该整数由方法中的 random() 函数随机生成。
random()
函数是 IntRange 的扩展函数,它返回从提供的范围中随机生成的元素。
如果范围为空,该方法将抛出 IllegalArgumentException。 当范围的第一个元素大于范围的最后一个元素时,范围为空。
random()
函数在幕后使用 Random 的 nextInt() 扩展函数来生成一个在提供的范围内均匀分布的数字。
生成的数字可以是 0 到 10 之间的任何数字。 如果你多次运行上面的代码,你会注意到你会得到范围内的任意随机数。
输出:
... Example One ...
3
在 Kotlin 中将 random() 与 Range Exclusive 结合使用
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
fun exampleTwo(): Int{
return (0 until 10).random();
}
fun main(){
println("... Example Two ...")
println(exampleTwo());
}
在前面的例子中,我们在range中使用了..,用来表示rangeTo()方法。 但是,在此示例中,我们使用了 until,它表示 Int.until() 扩展函数。
until() 扩展函数返回从起始值到不包括提供的最后一个值的范围。 起始值通常表示为 this 以指示正在作用的当前值。
如果您多次运行前面的示例,您会注意到总会生成一个随机数,但永远不会生成值 10。
输出:
... Example Two ...
5
在Kotlin中使用Iterable的shuffled()扩展函数
shuffled()
函数是 Iterable 接口的扩展函数,返回一个元素列表。 返回的列表允许我们使用 Collection 接口的 random() 扩展函数来生成随机数。
对前面的示例进行注释,然后将以下代码复制并粘贴到 Main.kt 文件中。
fun exampleThree(): Int{
return (0..10).shuffled().random()
}
fun main(){
println("... Example Three ...")
println(exampleThree());
}
在这段代码中,我们创建了一个名为 exampleThree()
的方法,它返回一个在该方法中生成的整数。
shuffled()
函数将 0 到 10 之间的数字范围作为打乱后的列表返回。 请注意,范围是包含在内的。
如果您希望范围是独占的,请使用 Int.until() 函数,如前一个示例中所述。
random() 函数从打乱后的列表中生成一个随机数,如果列表为空,该函数将抛出 NoSuchElementException。
如果多次运行这段代码,每次执行都会从打乱后的列表中生成一个随机数。
输出:
... Example Three ...
7
在 Kotlin 中使用 ThreadLocalRandom
当前线程使用 ThreadLocalRandom 生成一个随机数。 该生成器主要用于并发程序中以减少开销和争用。
生成器专门用于不同程序在线程池上并行访问随机数的时候。
当我们所有的用法都是 ThreadLocalRandom.current.nextX() 形式时,其中 X 可以是 nextInt()、nextLong() 等。它确保生成器不能跨多个线程共享。
current()
方法是一个静态方法,返回一个ThreadLocalRandom对象,只能被当前线程调用。
注释前面的代码,然后将以下代码复制并粘贴到 Main.kt 文件中。
import java.util.concurrent.ThreadLocalRandom
fun exampleFour(bound: Int): Int{
return ThreadLocalRandom.current().nextInt(bound)
}
fun main(){
println("... Example Four ...")
println(exampleFour(9))
}
nextInt()
方法生成一个伪随机数,它均匀分布在 0 到但不包括我们提供的绑定数字之间。
如果界限不是正数,该方法将抛出 IllegalArgumentException。 如果多次运行上面的代码,会得到一个不同的统一生成的伪随机数。
输出:
... Example Four ...
3
总结
本篇文章介绍了我们可以在 Kotlin 中生成随机数的不同方法,涵盖的方法包括:
- 使用 IntRange 的 random() 扩展函数。
- 使用 Iterable 的 shuffled() 扩展函数。
- 使用 ThreadLocalRandom。
我们还学习了通过使用
..
或until
在范围内将生成的范围修改为包含或排除。
相关文章
Kotlin 中 Java String[] 的等价物
发布时间:2023/05/13 浏览次数:59 分类:Java
-
本文介绍了 Kotlin 中 Java String[] 的等价物。 我们将看到所有可能的方法来为 Kotlin 实现与 Java 中的 String[] 相同的结果。
将 Java 文件代码转换为 Kotlin
发布时间:2023/05/13 浏览次数:142 分类:Java
-
Kotlin 现在是一种官方的 Android 语言。 因此,您可能希望将 Java 文件更改为 Kotlin。 本文教您如何将 Java 转换为 Kotlin。
在 Kotlin 中使用 forEach
发布时间:2023/05/13 浏览次数:122 分类:Java
-
本文介绍 Kotlin 中 forEach 关键字的概念和使用。 我们将看到一些使用 Kotlin forEach 循环的示例来理解它。
在 Kotlin 中使用 reified 关键字
发布时间:2023/05/13 浏览次数:197 分类:Java
-
reified 关键字是在 Kotlin 中使用泛型时最常使用的编程概念。在本教程中,我们将学习如何使用两种方法解决此问题,包括将类型的类作为泛型函数的参数传递,以及将 reified 关键字与内联函数
Kotlin 中 ! 和 ? 运算符之间的区别
发布时间:2023/05/13 浏览次数:180 分类:Java
-
在 Kotlin 中,断言运算符 !! 和安全调用符 ? 使用 Null 安全。本文介绍空安全的概念。 我们也将通过如何! 和 ? 在 Kotlin 中有助于空安全。
Kotlin 中 is 运算符 与 as 运算符之间的区别
发布时间:2023/05/13 浏览次数:148 分类:Java
-
这篇文章讨论了 Kotlin 中 is 和 as 运算符之间的区别。 我们还将介绍如何以及何时使用每一个。
Android Studio 中的 Kotlin 打印到控制台
发布时间:2023/05/13 浏览次数:52 分类:Java
-
Kotlin 的 logcat 窗口可以实时显示输出,让开发人员能够高效地处理他们的代码。 今天,我们将完成将消息打印到 Kotlin 控制台的步骤。
在 Kotlin 中实现 floor 模函数
发布时间:2023/05/13 浏览次数:161 分类:Java
-
在本教程中,我们将学习如何创建一个自定义函数,以使用满足开发人员要求的任何参数来计算此数字与另一个数字的 floor 除法的余数。
在 Kotlin 中继承具有多个构造函数的类
发布时间:2023/05/12 浏览次数:200 分类:Java
-
本文讨论如何扩展具有多个构造函数的类。 构造函数是在创建对象时调用的函数,用于初始化类变量。在 Kotlin 中扩展具有多个构造函数的类