【问题标题】:InputMismatchException using Scanner#nextDouble with valid valuesInputMismatchException 使用具有有效值的 Scanner#nextDouble
【发布时间】:2015-12-11 23:34:04
【问题描述】:

这是我的扫描仪代码:

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.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)

我可以做些什么来消除这个错误?

【问题讨论】:

  • 删除评论和6
  • 对我来说很好。可能是Locale 问题。尝试使用, 而不是. 看看它是否有效。

标签: java


【解决方案1】:

这是一个语言环境问题: 如果你想使用 .你可以试试这样的:

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);
    }
}

【讨论】:

    【解决方案2】:

    当有人输入非双精度对象时会引发此异常。我尝试输入“a”并且能够看到异常。

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

    该示例还存在资源泄漏,因为 Scanner 未关闭。以下是如何做到这一点的示例:

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

    【讨论】:

    • 这不是OP有问题的原因。这是一个语言环境问题。
    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 2011-08-21
    • 2011-04-04
    • 2018-07-13
    相关资源
    最近更新 更多