Android Studio Kotlin实现选择题无重复随机分配选项到按钮
解决四选一选择题选项无重复分配问题
要实现4个选项(含正确答案)无重复分配到按钮,核心是先准备好不包含重复项的选项列表,再和按钮一一绑定。你当前只处理了正确答案的放置,缺少错误选项的筛选和去重逻辑,以下是修正后的实现:
步骤说明
- 从选择题数组中筛选出不等于正确答案的选项,避免把正确答案重复分配到其他按钮
- 从筛选后的错误选项中随机选3个不重复的(需确保原错误选项数量足够)
- 将正确答案和这3个错误选项合并成新列表,打乱顺序
- 打乱后的列表和按钮列表一一对应,设置按钮文本
修正后的Kotlin代码
private fun choices(){ val rightAns = intent.getStringExtra("clip") ?: return // 空值判断,避免空指针异常 val buttons = listOf(ansA, ansB, ansC, ansD) // 简化按钮列表创建 val choices = getArrayList("movies") ?: return // 筛选所有不等于正确答案的错误选项 val wrongChoices = choices.filter { it != rightAns }.toMutableList() // 随机选3个不重复的错误选项 val selectedWrongChoices = mutableListOf<String>() repeat(3) { if (wrongChoices.isNotEmpty()) { val randWrong = wrongChoices.random() selectedWrongChoices.add(randWrong) wrongChoices.remove(randWrong) // 移除已选选项,避免重复 } } // 组合选项并打乱顺序 val allOptions = mutableListOf(rightAns).apply { addAll(selectedWrongChoices) } allOptions.shuffle() // 一一对应设置按钮文本 buttons.forEachIndexed { index, button -> button.text = allOptions[index] } }
额外优化点
- 添加空值判断(
?: return),防止intent.getStringExtra("clip")或getArrayList("movies")为空导致崩溃 - 用
listOf替代ArrayList创建按钮列表,写法更简洁 - 使用
shuffle()直接打乱选项列表,替代手动选随机按钮的逻辑,代码逻辑更清晰
如果你的choices数组可能存在不足3个错误选项的情况,可以在代码中添加兜底逻辑(比如填充提示文本,或者提前确保选择题数组有足够多的备选选项)。
内容的提问来源于stack exchange,提问作者Haitham Shalabi
相关产品推荐
相关产品推荐

