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

Java使用Scanner读取字符串与Double值时出现InputMismatchException如何解决

问题原因

  • 终止判断逻辑顺序错误:END_PRICES的终止判断放在了读取double值的代码之后,输入终止标记时,程序会先尝试读取不存在的double值,直接抛出InputMismatchException,根本走不到终止判断的代码行。
  • 输入缓冲区处理逻辑存在瑕疵,换行符残留会干扰后续输入读取。

修复方案

调整逻辑顺序,先读取第一个字符串判断是否为终止标记,确认不是后再读取价格数值,修正后的代码如下:

Scanner input = new Scanner(System.in);
ArrayList<String> fruitName = new ArrayList<>();
ArrayList<Double> fruitPrice = new ArrayList<>();
while(true) {
    String str = input.next();
    // 先判断是否是终止标记,是则直接退出循环,不需要再读价格
    if(str.equals("END_PRICES")) {
        break;
    }
    // 确认是正常水果数据,再读取价格
    Double v = input.nextDouble();
    fruitName.add(str);
    fruitPrice.add(v);
    // 清空当前行剩余的换行符等内容
    input.nextLine();
}

验证说明

输入格式符合要求时,每一行的水果名和价格会被正常存入对应列表;输入END_PRICES时,程序会直接触发break终止循环,不会再尝试读取double值,也不会再抛出类型不匹配异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:27:04