Java中scanner.nextDouble()抛出InputMismatchException问题求助
解决Scanner.nextDouble()输入小数抛出InputMismatchException的问题
问题原因
Scanner.nextDouble()的解析逻辑依赖JVM的默认区域设置(Locale)。如果你的系统默认Locale使用逗号(,)作为小数点分隔符(比如欧洲部分地区的Locale),输入点(.)格式的小数就会触发InputMismatchException。
解决方案
最通用的解决方法是显式指定Scanner使用以点(.)作为小数点的Locale,比如Locale.US:
修改后的代码如下:
import java.util.Scanner; import java.util.Locale; public class Hypotenuse { public static void main(String[] args){ double a; double b; double c; Scanner scanner = new Scanner(System.in); // 强制Scanner使用美式区域规则,确保解析点格式的小数 scanner.useLocale(Locale.US); System.out.println("Type first side: "); a = scanner.nextDouble(); System.out.println("Type second side: "); b = scanner.nextDouble(); c = Math.sqrt((a*a) + (b*b)); System.out.println("The c side is: " + c); scanner.close(); } }
补充说明
如果不想修改代码,也可以按照系统默认Locale的要求输入:比如默认Locale用逗号做小数点时,输入1,2而非1.2。但显式设置Locale的方式能让程序在不同环境下都兼容点格式的小数输入,适用性更强。
内容的提问来源于stack exchange,提问作者Błażej Pajor
相关产品推荐
相关产品推荐

