首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java抛出InputMismatchException

Java抛出InputMismatchException
EN

Stack Overflow用户
提问于 2016-04-20 17:09:17
回答 1查看 449关注 0票数 1

我开始学习Java,我正在从我的书中做一些练习。在执行此操作时,我遇到了以下错误:Exception in thread "main" java.util.InputMismatchException。我正在编写一个简单的程序,它从.txt文件中获取数据并将其返回到控制台。下面是代码:

Employee.java

代码语言:javascript
复制
import static java.lang.System.out;

public class Employee {
    private String name;
    private String jobTitle;

    public void setName(String nameIn) {
        name = nameIn;
    }
    public String getName() {
        return name;
    }

    public void setJobTitle(String jobTitleIn) {
        jobTitle = jobTitleIn;
    }
    public String getJobTitle() {
        return jobTitle;
    }

    public void cutCheck(double amountPaid){
        out.printf("Pay an employee %s ", name);
        out.printf("(%s) ***$", jobTitle);
        out.printf("%,.2f", amountPaid);
    }
}

DoPayroll.java

代码语言:javascript
复制
import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class DoPayroll {
    public static void main(String[] args) throws IOException {
        Scanner diskScanner = new Scanner(new File ("EmployeeInfo.txt"));
        for(int empNum = 1; empNum <= 3; empNum++){
            payOneEmployee(diskScanner);
        }
    }
    static void payOneEmployee(Scanner aScanner) {
        Employee anEmployee = new Employee();
        anEmployee.setName(aScanner.nextLine());
        anEmployee.setJobTitle(aScanner.nextLine());
        anEmployee.cutCheck(aScanner.nextDouble());
        aScanner.nextLine();
    }
}

EmployeeInfo.txt

代码语言:javascript
复制
John
Manager
15000.00
Alice
Secretary
8000.00
Bob
Engineer
12000.00
**an empty line**

编译器中的错误日志:

代码语言:javascript
复制
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at DoPayroll.payOneEmployee(DoPayroll.java:19)
    at DoPayroll.main(DoPayroll.java:11)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 17:19:57

您的问题是由于Scanner使用当前的Locale来解析Double,所以您需要显式地设置一个允许使用点作为小数分隔符的Locale,例如Locale.US。因此,要修复代码,只需在for循环之前将其添加到代码中:

代码语言:javascript
复制
diskScanner.useLocale(Locale.US);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36750667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档