输入小数触发java.util.InputMismatchException报错,求问题排查
Scanner输入小数抛出InputMismatchException的原因及解决方法
报错原因
核心问题是区域设置(Locale)的小数分隔符不匹配。Scanner.nextDouble()方法会依据当前JVM的默认Locale解析输入的小数:
- 若你的系统默认Locale使用逗号(
,)作为小数分隔符(例如欧洲多数地区的系统),输入点号(.)格式的x.x小数时,Scanner无法识别该格式,直接抛出InputMismatchException。
解决方法
方法一:强制Scanner使用指定Locale(推荐)
修改代码,让Scanner使用以点号作为小数分隔符的Locale(比如美式英语Locale),这样不管系统默认设置是什么,都能正确解析x.x格式的输入:
import java.util.Scanner; import java.util.Locale; public class Main { public static void main(String[] args) { Scanner cl = new Scanner(System.in).useLocale(Locale.US); double a = cl.nextDouble(); System.out.print(a); } }
方法二:适配系统默认Locale的输入格式
查看系统默认Locale的小数分隔符,按照对应格式输入:
- 若系统默认用逗号分隔,就输入
x,x(比如3,14)而非x.x。这种方式无需修改代码,但需要用户适配系统输入规则。
内容的提问来源于stack exchange,提问作者KATCHAW
相关产品推荐
相关产品推荐

