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

Android Java答题应用:如何优化随机分配答案选项到按钮的代码

嘿,我懂你现在的痛点——这段代码确实能跑,但重复的if-else块看着就头疼,维护起来也麻烦。咱们来把它重构得更简洁优雅,同时保持功能不变!

优化思路

  • 先把所有按钮实例一次性存入数组,避免重复调用findViewById
  • 用Collections.shuffle打乱选项列表后,通过循环直接建立选项和按钮的映射,替代冗余的条件判断
  • 用HashMap存储选项到按钮的映射,方便后续快速查找某个选项对应的按钮

优化后的代码

// 1. 一次性获取所有按钮实例,存入数组
Button[] buttons = {
    findViewById(R.id.buttonA),
    findViewById(R.id.buttonB),
    findViewById(R.id.buttonC),
    findViewById(R.id.buttonD)
};

// 2. 初始化选项列表并打乱顺序
List<String> options = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
Collections.shuffle(options);

// 3. 建立选项与按钮的映射,同时设置按钮文本
Map<String, Button> optionButtonMap = new HashMap<>();
for (int i = 0; i < buttons.length; i++) {
    String currentOption = options.get(i);
    Button currentButton = buttons[i];
    // 设置按钮显示的选项文本
    currentButton.setText(currentOption);
    // 记录该选项对应的按钮
    optionButtonMap.put(currentOption, currentButton);
}

// 后续如果需要获取某个选项对应的按钮,直接从Map中取即可
Button buttonForA = optionButtonMap.get("A");
Button buttonForB = optionButtonMap.get("B");
// ...以此类推

为什么这更优?

  • 减少冗余代码:去掉了重复的if-else块,代码行数大幅减少,可读性更强
  • 更高效率:只调用一次findViewById获取所有按钮,避免多次遍历列表查找索引
  • 更好的可维护性:如果以后需要增加或减少选项,只需要修改按钮数组和选项列表即可,不需要改动大量条件判断
  • 逻辑更清晰:直接通过循环建立映射,逻辑一目了然,不容易出错

内容的提问来源于stack exchange,提问作者FamousSam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:38:31