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

Java循环逻辑问题:答对题目后无法生成新随机计算题

问题分析与修复方案

核心问题点

你的代码存在多处逻辑错误,导致循环无法正常触发:

  • 初始阶段c++完全无意义,c未被赋值为当前题目的正确答案,直接拿它和用户输入b比较,逻辑完全错误
  • while循环内的c被连续赋值加减乘除的结果,最终只保留除法计算值,和getRandomOperator()生成的运算符完全不匹配,正确答案判断彻底失效
  • 变量复用混乱,c既用来存正确答案又用来计数得分,导致逻辑冲突

修复后的代码示例

import java.util.Random;
import java.util.Scanner;

public class MathGame {
    public static void main(String[] args) {
        Random randN = new Random();
        Scanner scanner = new Scanner(System.in);
        int score = 0; // 单独用score统计得分
        char operator;
        double correctAnswer;

        System.out.println("You chose easy elimination mode");

        while (true) {
            // 生成随机数字
            int firstNumbereasy = randN.nextInt(9) + 2;
            int secondNumbereasy = randN.nextInt(firstNumbereasy - 1);
            // 获取随机运算符并计算对应正确答案
            operator = getRandomOperator();
            switch (operator) {
                case '+':
                    correctAnswer = firstNumbereasy + secondNumbereasy;
                    break;
                case '-':
                    correctAnswer = firstNumbereasy - secondNumbereasy;
                    break;
                case '*':
                    correctAnswer = firstNumbereasy * secondNumbereasy;
                    break;
                case '/':
                    // 确保除法结果为浮点数,避免精度问题
                    correctAnswer = (double) firstNumbereasy / secondNumbereasy;
                    break;
                default:
                    correctAnswer = 0;
                    break;
            }
            // 输出题目
            System.out.println("What is " + firstNumbereasy + operator + secondNumbereasy);
            double userInput = scanner.nextDouble();

            // 判断答案是否正确
            if (userInput == correctAnswer) {
                score++;
                System.out.println("Correct! Score: " + score);
            } else {
                System.out.println("Wrong! Final score: " + score);
                break; // 答错退出循环
            }
        }
        scanner.close();
    }

    // 补充getRandomOperator方法的实现
    private static char getRandomOperator() {
        Random rand = new Random();
        int opIndex = rand.nextInt(4);
        switch (opIndex) {
            case 0: return '+';
            case 1: return '-';
            case 2: return '*';
            case 3: return '/';
            default: return '+';
        }
    }
}

关键修复说明

  • 拆分变量:用score单独统计得分,correctAnswer存储当前题目的正确答案,避免变量复用冲突
  • 运算符与计算逻辑绑定:根据getRandomOperator()生成的运算符,用switch计算对应的正确答案,保证题目和答案匹配
  • 循环逻辑调整:用while(true)做无限循环,答对则加分继续出题,答错则输出最终得分并退出循环
  • 修复除法精度:将除法结果转为double,避免整数除法截断导致的答案判断错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:15:34