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

Android Studio Kotlin实现选择题无重复随机分配选项到按钮

解决四选一选择题选项无重复分配问题

要实现4个选项(含正确答案)无重复分配到按钮,核心是先准备好不包含重复项的选项列表,再和按钮一一绑定。你当前只处理了正确答案的放置,缺少错误选项的筛选和去重逻辑,以下是修正后的实现:

步骤说明

  1. 从选择题数组中筛选出不等于正确答案的选项,避免把正确答案重复分配到其他按钮
  2. 从筛选后的错误选项中随机选3个不重复的(需确保原错误选项数量足够)
  3. 将正确答案和这3个错误选项合并成新列表,打乱顺序
  4. 打乱后的列表和按钮列表一一对应,设置按钮文本

修正后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:55:10