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
相关产品推荐
相关产品推荐

