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

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);
    }
}

修正说明

  1. 删掉了while循环末尾多余的分号,把所有猜数字的逻辑都放到了循环内部,保证用户猜错时会反复进入判断流程。
  2. 每次判断高低后都会重新弹出输入框获取用户新的猜测值,保证逻辑可以正常推进。
  3. 补充了输入合法性校验、用户点取消的异常处理逻辑,避免非法输入导致程序崩溃。
  4. 补充了重玩选择的逻辑,符合作业要求。
  5. 保留了调试场景显示目标数字的弹窗,不需要可以直接注释对应行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:18:04