0

我正在学习 Java for Dummies,但我不知道为什么会出现这些错误。我用谷歌搜索了一些信息。

java.util.InputMismatchException表示我想读取错误类型的值。例如文件看起来像:

2543
Robert

我强制程序从第一行字符串中获取。在我看来,我文件中的所有内容看起来都是正确的。我将我的代码与书中的示例代码进行了比较,我找不到任何错误。

我使用 Netbeans。

文件“EmployeeInfo”如下所示:

Angela 
nurse 
2000.23

主要类:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class DoPayroll {       
    public static void main(String[] args)   throws IOException{
        Scanner diskScanner = new Scanner (new File("EmployeeInfo.txt"));
        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();
    }
}

班上:

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

    public void setName(String mName)
    {
        name = mName;
    }
    public String GetName()
    {
        return name;
    }
    public  void SetJobTitle(String mJobTitle)
    {
        jobTitle =  mJobTitle;
    }
    public String GetJobTitle()
    {
        return jobTitle;
    }

    public void cutCheck(double amountPaid)
    {
        System.out.printf("Pay to the order of %s", name);
        System.out.printf("%s ***€", jobTitle);
        System.out.printf("%,.2f\n", amountPaid);
    }
}
4

3 回答 3

1

您的代码非常好。我在 Java for Dummies 一书中遇到了同样的问题。

对我来说,问题在于文件的格式。我不是专家(还),所以很抱歉无法更详细地解释,但是InputMismatchException因为我使用 a.来分隔小数,而我的系统的标准小数由 a 分隔,所以很抱歉,

我建议您尝试像这样格式化您的文件:

Angela
nurse
2000,15
于 2014-06-22T11:49:35.267 回答
0

如果 - EmployeeInfo.txt


安吉拉

护士

2000.23


在代码
DoPayroll - 类
payOneEmployee -functions 第 4 行

anEmployee.setName(aScanner.nextLine()); // 这行将接受输入 - Angela
anEmployee.SetJobTitle(aScanner.nextLine()); // 这将采用零输入,因为第二行没有任何数据
anEmployee.cutCheck(aScanner.nextDouble()); // 此行将输入作为 -nurse
// 并且“nurse”不是双精度的,因此在
从护士转换为双精度时读取此行后,它会抛出 java.util.InputMismatchException

于 2013-08-16T13:02:01.517 回答
0

你也可以这样写

static void payOneEmployee(Scanner aScanner)
    {
        Employee anEmployee = new Employee();

        List<String> employeeValueList = new ArrayList();
        while (aScanner.hasNext())
        {
            employeeValueList.add(aScanner.next());
        }

        if (!employeeValueList.isEmpty())
        {
            anEmployee.setName(employeeValueList.get(0));
            anEmployee.SetJobTitle(employeeValueList.get(1));
            anEmployee.cutCheck(new Double(employeeValueList.get(2)));
        }

    }
于 2013-08-16T13:02:38.523 回答