Java减法答题程序无限循环求助:第二个while循环逻辑排查
修复Java减法答题程序的无限循环问题
嘿,我一眼就揪出问题所在了!你的第二个while循环确实是导致无限循环的元凶——当用户答错后,你只是反复提示重试,但完全没重新读取用户输入的新答案,原来的answer变量一直停留在错误值,循环条件number1 - number2 != answer永远成立,自然就卡死在循环里出不来了。
问题代码的核心缺陷
来看这段出错的循环逻辑:
while (number1 - number2 != answer) { System.out.println("Wrong, try again."); System.out.println("What is " + number1 + " - " + number2 + "? "); }
这里只做了提示,却没有更新answer的值,用户输入的新答案根本没被程序接收,循环永远跳不出去。
修复后的完整代码
只需要在循环内部添加一行读取新输入的代码就能解决问题,我把修改后的完整代码贴出来,还加了点小优化:
import java.util.Scanner; public class FirstJava { public static void main(String args[]) { final int NUMBER_OF_QUESTIONS = 5; int correctCount = 0; int count = 0; Scanner input = new Scanner(System.in); while (count < NUMBER_OF_QUESTIONS) { int number1 = (int) (Math.random() * 10); int number2 = (int) (Math.random() * 10); // 确保被减数≥减数,避免出现负数结果 if (number1 < number2) { int temp = number1; number1 = number2; number2 = temp; } System.out.print("What is " + number1 + " - " + number2 + "? "); int answer = input.nextInt(); // 循环直到用户答对为止 while (number1 - number2 != answer) { System.out.println("Wrong, try again."); System.out.print("What is " + number1 + " - " + number2 + "? "); // 关键修复:重新读取用户的新答案 answer = input.nextInt(); } System.out.println("Correct!"); count++; correctCount++; } System.out.println("You got " + correctCount + " correct!"); input.close(); // 关闭Scanner资源,避免资源泄漏 } }
额外优化说明
- 我把循环里的
System.out.println改成了System.out.print,和第一次提问的格式保持一致,用户体验更统一; - 新增了
input.close();来关闭Scanner资源,这是Java编程里的好习惯,能避免不必要的资源浪费。
这样修改后,用户答错时程序会重新读取新的答案,直到答对才会进入下一题,完美实现你想要的“答对才继续”的需求!
内容的提问来源于stack exchange,提问作者jelebi04
相关产品推荐
相关产品推荐

