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

欧洲国旗测验newQuestion方法问题:正确答案始终固定在首个按钮

解决欧洲国旗测验程序中正确答案固定在第一个按钮的问题

嘿,我来帮你搞定这个问题!你遇到的正确答案总卡在第一个按钮的情况,核心原因是你没有随机分配正确答案的显示位置——大概率和case语句参数或者按钮初始化无关,除非你初始化时就把正确答案硬编码死在了第一个按钮上。

问题分析

从你的描述来看,newQuestion方法里应该是固定把正确答案放到了第一个按钮,然后把错误选项依次塞到剩下的按钮里,完全没有做随机化处理。这样不管怎么出题,正确答案自然永远在第一个位置。

修复方案:随机分配正确答案位置

我们的目标是:每次出题时,先随机选一个按钮位置放正确答案,再把错误选项填充到剩下的位置。这里给你两种实现思路:

方法1:直接打乱所有选项(简单高效)

把正确答案和错误选项放到同一个列表里,直接打乱顺序,再分配给按钮:

private void newQuestion(int number) {
    // 获取当前题目对应的国旗和答案数据
    FlagItem currentItem = list.get(number - 1);
    iv_flag.setImageResource(currentItem.flagResourceId); // 假设这是国旗资源ID

    // 准备所有选项:1个正确答案 + 3个错误答案
    List<String> allOptions = new ArrayList<>();
    allOptions.add(currentItem.correctCountry);
    allOptions.addAll(currentItem.wrongCountries); // 确保这个集合里有3个错误选项

    // 随机打乱整个选项列表
    Collections.shuffle(allOptions);

    // 把打乱后的选项分配给四个按钮
    btn_option1.setText(allOptions.get(0));
    btn_option2.setText(allOptions.get(1));
    btn_option3.setText(allOptions.get(2));
    btn_option4.setText(allOptions.get(3));

    // 记得保存当前正确答案,后续判断用户选择时要用
    this.currentCorrectAnswer = currentItem.correctCountry;
}

方法2:指定正确答案的随机位置(更可控)

如果你想精准控制正确答案的位置,而不是全量打乱,可以先随机生成一个0-3的索引(对应四个按钮),把正确答案放到这个位置,再填充错误选项:

private Random random = new Random(); // 复用Random实例,避免重复创建

private void newQuestion(int number) {
    FlagItem currentItem = list.get(number - 1);
    iv_flag.setImageResource(currentItem.flagResourceId);

    String correctAnswer = currentItem.correctCountry;
    List<String> wrongAnswers = currentItem.wrongCountries;
    String[] options = new String[4];

    // 随机生成正确答案的位置(0-3,对应四个按钮)
    int correctPos = random.nextInt(4);
    options[correctPos] = correctAnswer;

    // 填充错误选项到剩余位置
    int wrongIndex = 0;
    for (int i = 0; i < 4; i++) {
        if (i != correctPos) {
            options[i] = wrongAnswers.get(wrongIndex++);
        }
    }

    // 分配给按钮
    btn_option1.setText(options[0]);
    btn_option2.setText(options[1]);
    btn_option3.setText(options[2]);
    btn_option4.setText(options[3]);

    this.currentCorrectAnswer = correctAnswer;
}

额外注意事项

  • 确保wrongCountries集合里确实有3个错误选项,避免数组越界异常;
  • 建议复用Random实例(比如作为类成员变量),而不是每次调用方法时新创建;
  • 如果你的case语句是处理按钮点击逻辑的,只要你正确保存了currentCorrectAnswer,点击判断时只需要对比按钮文本和这个变量即可,和按钮位置无关——所以case参数本身不会导致正确答案固定的问题。

内容的提问来源于stack exchange,提问作者M. Warren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:35