使用带有有效值的Scanner#nextDouble的InputMismatchException

Mer*_*ian 5 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 = jin.nextDouble();
        System.out.println(a + b + c);
    }
}
Run Code Online (Sandbox Code Playgroud)

输入:0.2 0.5 0.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)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能消除该错误?

小智 5

这是一个区域设置问题:如果要使用。您可以尝试类似:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*hta 0

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

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

由于 Scanner 未关闭,该示例还存在资源泄漏。下面是如何执行此操作的示例:

public static void main(String  [] args){
        Scanner jin = null;
        try{
            jin = new Scanner(System.in);
            //logic
        }finally{
            jin.close();
        }
    }
Run Code Online (Sandbox Code Playgroud)