You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:35:21