Java 使用Scanner#nextDouble和有效值的输入不匹配异常

Java 使用Scanner#nextDouble和有效值的输入不匹配异常,java,Java,以下是我的扫描仪代码: import java.util.Scanner; public class TryDouble { public static void main(String [] args){ Scanner jin = new Scanner(System.in); double a = jin.nextDouble(); double b = jin.nextDouble(); double c = j

以下是我的扫描仪代码:

import java.util.Scanner;
public class TryDouble {

    public static void main(String  [] args){
        Scanner jin = new Scanner(System.in);
        double a = jin.nextDouble();
        double b = jin.nextDouble();
        double c = jin.nextDouble();
        System.out.println(a + b + c);
    }
}
输入:0.20.50.9,我得到:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at TryDouble.main(TryDouble.java:6)

如何删除该错误?

当有人输入双精度以外的内容时,会引发此异常。我尝试输入“a”,并能够看到异常

理想的方法是使用next()获取字符串形式的输入,验证它,如果不是数字,则显示错误消息

该示例还存在资源泄漏,因为扫描仪未关闭。下面是一个如何操作的示例:

public static void main(String  [] args){
        Scanner jin = null;
        try{
            jin = new Scanner(System.in);
            //logic
        }finally{
            jin.close();
        }
    }
这是一个区域设置问题: 如果你想用。您可以尝试以下方法:

package test;

import java.util.Locale;
import java.util.Scanner;
public class TryDouble {

    public static void main(String  [] args){
        Scanner jin = new Scanner(System.in).useLocale(Locale.US); 
        double a = jin.nextDouble();
        double b = jin.nextDouble();
        double c = jin.nextDouble();
        System.out.println(a + b + c);
    }
}

删除评论,这6条对我来说很好。可能是
Locale
问题。尝试使用
而不是
,然后看看它是否有效。这不是OP出现问题的原因。这是一个区域设置问题。