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

Java程序报错InputMismatchException:无法读取浮点/双精度数值

问题解决:Scanner读取double类型数值报错InputMismatchException

第一步:排查代码一致性问题

从报错栈信息可以明确看到,程序实际执行的是Scanner.nextInt()方法(报错行指向Javabasics.main(Javabasics.java:9)的nextInt调用),但你提供的代码里写的是sc.nextDouble()。请先确认:

  • 检查VS Code中打开的Javabasics.java文件,确保第9行确实是double price=sc.nextDouble();,而非nextInt()
  • 保存修改后的代码,重新执行编译命令javac Javabasics.java和运行命令java Javabasics

若代码确认无误,解决Locale区域设置问题

如果代码确实调用了nextDouble()但仍报错,核心原因是系统区域设置的小数点分隔符与输入格式不匹配:

  • 比如中文、德语等区域,默认用逗号(,)作为小数点分隔符,而你输入的是点(.),Scanner会判定为非法格式,抛出InputMismatchException

提供两种解决方法:

方法1:适配系统区域的输入格式

按照系统要求输入数值,将小数点替换为逗号,比如输入12,456而非12.456

方法2:强制Scanner使用点作为小数点分隔符

在创建Scanner实例后,设置其Locale为英语区域,强制识别点作为小数点:

import java.util.*;
public class Javabasics{
    public static void main (String args[])
    {
      Scanner sc=new Scanner(System.in);
      // 设置Locale为英语区域,统一用点作为小数点
      sc.useLocale(Locale.US);
      double price=sc.nextDouble();
      System.out.println(price);
    }
}

编译运行这段代码后,输入12.456即可正常读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:50:36