七年级学生求助: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
相关产品推荐
相关产品推荐

