2016-04-20 2 views
1

Я начал изучать Java, и я делаю некоторые упражнения из своей книги. При этом я столкнулся с этой ошибкой: Exception in thread "main" java.util.InputMismatchException. Я пишу простую программу, которая берет данные из файла .txt и возвращает его на консоль. Вот код:Java-броски InputMismatchException

Employee.java:

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:

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:

John 
Manager 
15000.00 
Alice 
Secretary 
8000.00 
Bob 
Engineer 
12000.00 
**an empty line** 

журнал ошибок от компилятора:

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) 

ответ

1

Ваша проблема связана с тем, что Scanner использует текущий Locale для разбора Double так что вам нужно явно установить Locale, что позволяет использовать точку в качестве десятичного разделителя, такие как, например, Locale.US. Таким образом, чтобы исправить свой код, вам просто нужно добавить это в ваш код перед циклом for:

diskScanner.useLocale(Locale.US); 
+0

удалить его, все еще имеют один и тот же вопрос :( – AlexNikolaev94

+0

, который работал, спасибо – AlexNikolaev94

+0

Добро пожаловать! -) –

Смежные вопросы