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

GUI项目if-else语句问题:首次正确输入误判及下一题展示求助

问题分析与解决方案

1. 首次输入正确却判定错误的核心原因

你遇到的问题大概率是两个关键点出错:

  • currentLineIndex初始化值错误:如果这个变量初始值不是0(比如设为1),第一次点击按钮b2时,代码会判断当前索引为1,你输入第一个谜题的答案DARKNESS自然不匹配,被判定错误;第二次输入第二个谜题的答案AGE时,刚好匹配索引1的条件,就会被正确识别。
  • b1点击逻辑缺失谜题加载:原代码中点击b1后只显示组件,没有把第一个谜题内容(lines[0])设置到textArea里,可能导致用户不知道当前要回答的是第一个问题,输入内容不匹配。

另外,原代码中b4的点击判断被放在b2的分支里,永远不会被触发,必须调整位置。

2. 修正后实现「正确答案后展示下一题」的完整逻辑

步骤1:正确初始化变量

确保谜题索引从0开始:

private int currentLineIndex = 0; // 强制初始化为0,对应第一个谜题

步骤2:完善b1的点击逻辑

点击b1后,除了显示组件,还要加载第一个谜题:

if (e.getSource() == b1) {
    textArea.setVisible(true);
    textArea.setText(lines[currentLineIndex]); // 加载第一个谜题内容
    b1.setVisible(false);
    tf.setVisible(true);
    b2.setVisible(true);
}

步骤3:优化答案判断(可选,简化冗余代码)

原有的多分支if-else可以用Map简化,后续新增谜题更方便:

// 提前定义谜题索引与正确答案的映射
private Map<Integer, String> answerMap = new HashMap<>() {{
    put(0, "DARKNESS");
    put(1, "AGE");
    put(2, "ECHO");
    put(3, "GRUDGES");
    put(4, "SECRET");
}};

之后在b2的逻辑里替换原有的判断:

boolean isCorrect = answerMap.get(currentLineIndex).equalsIgnoreCase(userInput.trim());

步骤4:修正后的完整actionPerformed方法

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
        textArea.setVisible(true);
        textArea.setText(lines[currentLineIndex]); // 加载第一个谜题
        b1.setVisible(false);
        tf.setVisible(true);
        b2.setVisible(true);
    } else if (e.getSource() == b2) {
        String userInput = tf.getText().trim(); // 去除输入前后空格,避免空格导致匹配失败
        boolean isCorrect = false;

        // 保留原有判断逻辑或替换为上面的Map方式
        if (currentLineIndex == 0 && userInput.equalsIgnoreCase("DARKNESS")) {
            isCorrect = true;
        } else if (currentLineIndex == 1 && userInput.equalsIgnoreCase("AGE")) {
            isCorrect = true;
        } else if (currentLineIndex == 2 && userInput.equalsIgnoreCase("ECHO")) {
            isCorrect = true;
        } else if (currentLineIndex == 3 && userInput.equalsIgnoreCase("GRUDGES")) {
            isCorrect = true;
        } else if (currentLineIndex == 4 && userInput.equalsIgnoreCase("SECRET")) {
            isCorrect = true;
        }

        if (isCorrect) {
            currentLineIndex++;
            if (currentLineIndex < lines.length) {
                textArea.setText(lines[currentLineIndex]); // 展示下一个谜题
                tf.setText("");
            } else {
                // 所有谜题完成后的处理
                b4.setVisible(true);
                tf.setText("");
                tf.setVisible(false);
                b2.setVisible(false);
                JOptionPane.showMessageDialog(frame, "所有谜题已完成!");
            }
        } else {
            tf.setText("");
            JOptionPane.showMessageDialog(frame, "答案错误,请重试");
        }
    } else if (e.getSource() == b4) {
        frame.dispose();
        new Frame10();
    }
}

额外注意事项

  • 调用trim()处理用户输入,避免不小心输入的空格导致答案匹配失败。
  • 确保lines数组的长度和谜题数量一致,比如5个谜题对应数组长度为5,避免数组越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:49