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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:38