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

Do While循环中添加投保人时触发InputMismatchException问题排查

问题排查与解决方案

核心原因

这个问题90%是Scanner输入缓冲区残留换行符导致的:
当第一次循环中使用nextInt()/nextDouble()这类数值读取方法时,它们只会读取输入的数值部分,而你输入完数值后按下的回车(换行符\n)会留在输入缓冲区里。第二次循环调用nextLine()读取姓氏时,会直接读取到这个残留的换行符,导致后续输入逻辑错位,触发InputMismatchException。

解决方案

方案1:读取数值后手动清空缓冲区

每次用nextInt()/nextDouble()读取完数值后,额外调用一次scanner.nextLine()吃掉残留的换行符:

// 示例:读取年龄后清空换行符
int age = scanner.nextInt();
scanner.nextLine(); // 关键:清除缓冲区里的换行符
// 再读取姓氏
String lastName = scanner.nextLine();

方案2:统一用nextLine()读取所有输入(更稳妥)

放弃使用nextInt()/nextDouble(),全部用nextLine()读取输入内容,再手动转换为对应数据类型,彻底避免缓冲区问题:

// 读取年龄字符串并转为int
String ageInput = scanner.nextLine();
int age = Integer.parseInt(ageInput);
// 直接读取姓氏
String lastName = scanner.nextLine();

方案3:检查循环条件的输入读取逻辑

如果你的Do While循环条件里包含了输入读取操作(比如while(scanner.hasNextInt())),要确保这部分逻辑不会提前消耗掉本该用于读取姓氏的输入,导致后续读取错位。

额外提醒

如果后续仍出现异常,建议在输入读取部分添加异常捕获(比如try-catch包裹Integer.parseInt()),避免用户输入非数值内容时直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:40:46