我正在学习Java for Dummies,我不知道为什么会出现这些错误。我用Google搜索了一些信息。
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);
}
}
答案 0 :(得分:1)
你的代码非常好。我在Java for Dummies书中遇到了同样的问题。
对我来说,问题在于文件的格式化。我还不是专家,所以我很抱歉无法进一步详细解释,但InputMismatchException
被抛出,因为我使用.
来分隔小数,而我的系统的标准小数是以,
我建议您尝试格式化文件:
Angela
nurse
2000,15
答案 1 :(得分:0)
if - EmployeeInfo.txt
在守则中
DoPayroll - 班级
payOneEmployee -functions第4行
anEmployee.setName(aScanner.nextLine()); //这条线将接受输入 - Angela
anEmployee.SetJobTitle(aScanner.nextLine()); //这将取零输入,因为第二行没有任何数据
anEmployee.cutCheck(aScanner.nextDouble()); //这一行把输入作为 - 护士
//和"护士"在铸造时读取这条线后不是双倍的
从护士到duble它抛出java.util.InputMismatchException
答案 2 :(得分: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)));
}
}