线程“主”java.util.InputMismatchException nextDouble() 错误中的异常? [复制]

Posted

技术标签:

【中文标题】线程“主”java.util.InputMismatchException nextDouble() 错误中的异常? [复制]【英文标题】:Exception in thread "main" java.util.InputMismatchException nextDouble() error? [duplicate] 【发布时间】:2016-03-21 11:26:17 【问题描述】:

CitireFisier.java

public class CitireFisier  
    public static void main(String[] args) 
        File f = new File("fisier.txt");

        Scanner scn = null;
        try 
            scn = new Scanner(f);
         catch (FileNotFoundException e) 
            e.printStackTrace();
        

        int size = scn.nextInt();  
        System.out.println("val  is " + size);

        double var  = scn.nextDouble();
        System.out.println("val  is " + var);
    

输出

val is 3
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)

fisier.txt

3
0.1 0.7 0.2 init g
0.0 0.0 1.0 g y
0.0 0.0 1.0 g y

nextDouble() 收到错误但 0.1 是 double!

【问题讨论】:

【参考方案1】:

如果您的语言环境使用逗号作为小数分隔符,则 0.1 不是双精度数。

要解决此问题,请像这样实例化您的 Scanner:

 scn = new Scanner(f).useLocale(Locale.US);

【讨论】:

是的,这是一个明智的答案。法语、德语和意大利语使用逗号,在使用这些语言环境时会中断。 谢谢!它适用于 scn = new Scanner(f).useLocale(Locale.US);【参考方案2】:

我猜问题取决于所使用的 Java 版本,因为在我的 Java 版本 (Java(TM) SE 运行时环境 (build 1.8.0_74-b02)) 中,我没有收到错误。不过,也许这对您的版本有所帮助(如问题的 cmets 中所述):

public static void main(String[] args) 
    File f = new File("fisier.txt");
    Scanner scn = null;
    try 
        scn = new Scanner(f);
     catch (FileNotFoundException e) 
        e.printStackTrace();
    
    int size = scn.nextInt();
    System.out.println("val  is " + size);

    // not needed in my Java Version
    scn.nextLine();

    double var = scn.nextDouble();
    System.out.println("val  is " + var);

编辑

你可能还想看看Trouble using nextInt and nextLine()

【讨论】:

以上是关于线程“主”java.util.InputMismatchException nextDouble() 错误中的异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

子线程怎么不阻塞主线程

QT中UI主窗口如何与子线程相互传递参数

java 子线程 回调 主线程

C++怎么在主线程中使用子线程的数据? 比如说主线程中有一个数组,如何在子线程中调用这个数组

EventBus事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )