Java猜数字作业JOptionPane其余对话框无法弹出问题求助
核心问题排查
你遇到的对话框无法弹出的问题,是代码语法和逻辑结构错误导致的,主要问题如下:
- 最致命的错误:
while (guess != randNum);末尾多了半角分号,这会让while循环变成无执行体的空死循环,只要首次猜测不对,程序就会卡死在这一行,永远不会执行后面的判断和弹窗逻辑。 - 高低判断、获取新猜测值的逻辑没有放到while循环内部,就算去掉分号也只会执行一次判断,不会反复引导用户猜测。
- 提示用户猜测过高/过低后,没有重新获取用户输入的新值,
getGuess变量永远存储的是第一次输入的内容,逻辑无法正常推进。 - 猜测次数的计数位置错误,首次猜测没有被计入总次数。
修正后符合要求的完整代码
import javax.swing.JOptionPane; class NumberGuess { public static void main(String[] arg) { // 外层循环控制是否重玩 while (true) { // 生成1-1000的随机数 int randNum = (int) (Math.random() * 1000 + 1); // 调试场景显示目标数字,不需要可以注释掉下面这行 JOptionPane.showMessageDialog(null, "[调试用] 目标数字是:" + randNum); int guessCount = 0; int guess = 0; while (guess != randNum) { // 获取用户输入 String input = JOptionPane.showInputDialog("Guess a number between 1 and 1000."); // 处理用户点取消的情况 if (input == null) { System.exit(0); } try { guess = Integer.parseInt(input); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "请输入合法的数字!"); continue; } guessCount++; // 判断猜测结果 if (guess > randNum) { JOptionPane.showMessageDialog(null, "Too high, try again"); } else if (guess < randNum) { JOptionPane.showMessageDialog(null, "Too low, try again"); } else { // 猜对的情况 JOptionPane.showMessageDialog(null, "Congratulations you guessed the number\n总猜测次数:" + guessCount); } } // 询问是否重玩 int choose = JOptionPane.showConfirmDialog(null, "是否要重新玩一局?", "重玩确认", JOptionPane.YES_NO_OPTION); if (choose != JOptionPane.YES_OPTION) { break; } } System.exit(0); } }
修正说明
- 删掉了while循环末尾多余的分号,把所有猜数字的逻辑都放到了循环内部,保证用户猜错时会反复进入判断流程。
- 每次判断高低后都会重新弹出输入框获取用户新的猜测值,保证逻辑可以正常推进。
- 补充了输入合法性校验、用户点取消的异常处理逻辑,避免非法输入导致程序崩溃。
- 补充了重玩选择的逻辑,符合作业要求。
- 保留了调试场景显示目标数字的弹窗,不需要可以直接注释对应行。
内容的提问来源于stack exchange,提问作者Shark
相关产品推荐
相关产品推荐

