Android Studio中Kotlin随机项始终重复问题求助
解决Kotlin随机生成内容每次运行相同的问题
你的问题出在默认随机数生成器的种子初始化上:Android应用启动时,Kotlin默认的Random.Default实例可能被赋予固定种子,导致每次运行生成的随机序列完全一致。同时,你当前的循环选不重复元素的逻辑也可以大幅优化。
修复方案
直接使用shuffled()方法打乱原列表,再取前4个元素,这种方式逻辑简洁,还能避免重复判断的低效循环。如果仍存在随机序列固定的问题,可显式使用带有随机种子的生成器:
方案1:简洁高效的基础写法
fun two_click(view: View) { val list1 = mutableListOf("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten") // 打乱列表并提取前4个不重复元素 val list2 = list1.shuffled().take(4) println(list2) }
方案2:使用安全随机生成器(确保每次种子不同)
如果基础写法仍存在随机序列固定的情况,使用SecureRandom生成更随机的种子:
import java.security.SecureRandom fun two_click(view: View) { val list1 = mutableListOf("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten") val secureRandom = SecureRandom() val list2 = list1.shuffled(secureRandom).take(4) println(list2) }
方案3:基于当前时间的随机种子
也可以用当前时间戳作为种子初始化随机生成器:
import kotlin.random.Random fun two_click(view: View) { val list1 = mutableListOf("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten") val random = Random(System.currentTimeMillis()) val list2 = list1.shuffled(random).take(4) println(list2) }
原代码问题说明
你原来的循环逻辑虽然能实现取4个不重复元素,但效率较低(当列表接近取完时,会多次重复随机)。而shuffled()内部已经优化了随机打乱逻辑,结合take(4)可以直接得到目标列表,同时解决随机序列固定的问题。
内容的提问来源于stack exchange,提问作者urdurak
相关产品推荐
相关产品推荐

