在 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
在范围内将生成的范围修改为包含或排除。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,