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

七年级学生求助:Java猜数字游戏按钮失效,报NumberFormatException

解决猜数字游戏中的NumberFormatException问题

嘿,同学!刚看到你在写第一个Java猜数字游戏时碰到的麻烦——点击猜测按钮就触发AWT-EventQueue-0的NumberFormatException,提示“输入字符串为空”对吧?这绝对是新手写Swing程序时最常踩的坑之一,咱们来一步步把它搞定!

问题根源

你调用Integer.parseInt(txtGuess.getText())尝试把输入框的内容转成整数时,如果用户没输入任何内容就点按钮,getText()会返回空字符串"",而Java的Integer.parseInt()根本没法把空字符串转换成整数,直接就抛出这个异常了。

分步解决方案

1. 先做输入空值检查

在checkGuess()方法的最开头,先把输入文本取出并去掉首尾空格(防止用户只敲了空格),然后判断是否为空:

public void checkGuess() {
    // 先获取输入并清理空格
    String guessInput = txtGuess.getText().trim();
    
    // 检查是否为空或全是空格
    if (guessInput.isEmpty()) {
        // 弹出提示告诉用户要输入数字
        JOptionPane.showMessageDialog(this, "请先输入一个数字哦!", "输入提示", JOptionPane.WARNING_MESSAGE);
        // 让光标回到输入框,方便用户直接输入
        txtGuess.requestFocus();
        // 直接返回,不执行后面的转换逻辑
        return;
    }
    
    // 下面写原来的转换和判断逻辑...
}

2. 加异常捕获做兜底防护

就算做了空检查,万一用户输入的是字母、符号这类非数字内容,还是会触发NumberFormatException。所以最好把转换逻辑包在try-catch块里,给用户友好的提示:

public void checkGuess() {
    String guessInput = txtGuess.getText().trim();
    
    if (guessInput.isEmpty()) {
        JOptionPane.showMessageDialog(this, "请先输入一个数字哦!", "输入提示", JOptionPane.WARNING_MESSAGE);
        txtGuess.requestFocus();
        return;
    }
    
    try {
        // 安全转换输入为整数
        int userGuess = Integer.parseInt(guessInput);
        
        // 这里写你原来的判断逻辑:和theNumber比较,提示太高/太低/猜对了
        if (userGuess > theNumber) {
            JOptionPane.showMessageDialog(this, "猜高啦!");
        } else if (userGuess < theNumber) {
            JOptionPane.showMessageDialog(this, "猜低啦!");
        } else {
            JOptionPane.showMessageDialog(this, "恭喜你猜对了!");
            // 可以在这里重置游戏,生成新的随机数
        }
        
    } catch (NumberFormatException e) {
        // 输入不是有效整数时的提示
        JOptionPane.showMessageDialog(this, "请输入有效的整数哦!别填字母或符号~", "输入错误", JOptionPane.ERROR_MESSAGE);
        // 清空输入框,方便用户重新输入
        txtGuess.setText("");
        txtGuess.requestFocus();
    }
}

额外小建议

  • 可以在输入框旁边加个标签,比如JLabel hintLabel = new JLabel("请输入1-100之间的数字:");,提前告诉用户输入规则;
  • 如果想从源头限制输入只能是数字,可以给txtGuess添加DocumentFilter,这样用户根本没法输入非数字字符,从根源避免这类异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:34:23