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

Java代码运行时do-while循环前意外抛出NumberFormatException求助

错误原因
  • 这是java.util.Scanner的经典使用误区:你在读取骰子数量(对应控制台提示Enter the number of dice to draw (re-roll) - up to 3: 的输入逻辑)时,使用了input.nextInt()方法读取整数。nextInt()只会读取输入的数字本身,不会消化你输入完成后按下的换行符,该换行符会残留在输入缓冲区中。
  • 当do-while循环第一次执行调用input.nextLine()时,会直接读取到缓冲区里残留的换行符,返回空字符串"",对空字符串做split(" ")后尝试转Integer就会抛出你遇到的NumberFormatException,因此看起来异常在循环逻辑执行前就触发了。
  • 另外你当前的异常捕获列表没有包含NumberFormatException,所以该异常没有被你自定义的catch逻辑处理,会直接打印默认异常信息到控制台。
修复方案

可选任意一种方案解决换行残留问题:

  1. 读完上一步的整数后,主动调用一次nextLine()消化残留换行
    在你获取骰子数量的代码后新增一行:
int drawNum = input.nextInt(); // 你原有读取骰子数量的代码
input.nextLine(); // 新增这行,吃掉输入缓冲区残留的换行符
  1. 统一所有输入都用nextLine()读取,再自行转换为对应类型,避免不同输入方法混用的问题,比如读取骰子数量的逻辑改为:
String drawNumStr = input.nextLine();
int drawNum = Integer.parseInt(drawNumStr);
额外优化建议

补充NumberFormatException的捕获逻辑,避免后续用户输入非数字内容时直接抛出未处理异常:

catch (NumberFormatException nfe) {
    System.out.println(nfe);
    System.out.println("输入内容不是合法数字,请重试");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:04