Kotlin问题:每次重启App后Random生成结果均相同的解决方法
解决App重启后随机字符串重复的问题
问题原因
Kotlin的Array.random()方法默认依赖全局的Random实例,这个实例在App启动时会使用固定种子初始化,导致每次重启App后生成的随机序列完全一致——这是语言标准库的默认行为,并非Bug。
修复方案
要让每次重启都得到不同的随机结果,需要手动创建带动态种子的Random实例。最常用的动态种子是当前系统时间戳(System.currentTimeMillis()),因为每次启动App的时间都不一样,能保证随机生成器的初始状态唯一。
完整修复代码
将原按钮点击事件代码替换为以下版本:
button.setOnClickListener { // 用当前时间戳作为种子创建随机生成器 val random = Random(System.currentTimeMillis()) // 生成数组范围内的随机索引,获取对应字符串 val randomValue = Carts[random.nextInt(Carts.size)] // 将结果设置到TextView tvvoorkant.text = randomValue }
代码说明
- 旧代码中的
Carts.random()依赖全局固定种子的随机器,重启后随机序列重复; - 新代码通过
Random(System.currentTimeMillis())创建了每次启动状态都不同的随机器,再用nextInt(Carts.size)生成合法的数组索引,确保每次重启后的随机结果都不重复。
注:如果是频繁生成随机数的场景,建议把Random实例作为类成员变量初始化一次;但对于单次点击的场景,当前写法完全够用。
内容的提问来源于stack exchange,提问作者Curiousnoes
相关产品推荐
相关产品推荐

