public static void main(String[] args) throws FileNotFoundException {
File file = new File("data.txt"); // select file
try{
Scanner sc = new Scanner(file); // set scanner to file
try{
while (sc.hasNextLine()){
Employee employee = new Employee(); //create employee to hold data
assignData(sc); //read data into employee
employee.getGross(); //calculate gross pay
addEmployee(employee);//assign employee to array
}//end while
}//end try2
finally {
sc.close(); // close file, saving resource usage
}//end finally
}//end try1
catch(IOException e) {
e.printStackTrace();
}
public static void assignData(Scanner input){
//accept scanner
//read necessary input for employee
EmpID = input.next();****
LastName = input.next();****
FirstName = input.next();****
(LINE 36)Hours = input.nextDouble();
Rate = input.nextDouble();
}数据文件内容
42345 Bruch Max 40 21.50
23456 Elgar Eddie 43 20.0
34567 Bach John 30 30
12345 Wagner Rick 41 30
88888 Mozart Wolfie 36 40
65432 Chopin Fred 45 23.25
72345 Strauss Butch 50 25编译,我得到错误
"Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at programassignment1c.Employee.assignData(Employee.java:36) (
at programassignment1c.ProgramAssignment1C.main(ProgramAssignment1C.java:44)Java结果:1
在Employee类中的第36行,上面是高亮显示的,它是nextDouble(),我做错了什么?双倍可以被扫描,即使他们没有十进制位?
我看到扫描仪从: 42345开始,并将其设置为EmpID,然后扫描仪将过去的空白推进到
它将此设置为LastName,然后扫描仪将过去的空白推进到最大,并将其设置为FirstName,然后扫描仪将过去的空白推进到40,是否应该将其设置为小时?我没有正确地跟踪扫描器?
发布于 2013-09-16 20:37:18
我认为您需要在这里使用特定的数据类型方法:
EmpID = input.nextLine();
LastName = input.nextLine();
FirstName = input.nextLine();尝试使用nextInt/next而不是nextLine.As nextLine会读取整行,当您尝试将它赋值给int值时,它会抛出InputMismatchException。
发布于 2013-09-16 20:36:51
您正在调用nextLine()而不是next(),后者每次读取(并跳过但不使用行分隔符)行。你有
EmpID = input.nextLine();
LastName = input.nextLine();
FirstName = input.nextLine();
(LINE 36)Hours = input.nextDouble();
Rate = input.nextDouble();所以
42345 Bruch Max 40 21.50 // EmpID
23456 Elgar Eddie 43 20.0 // LastName
34567 Bach John 30 30 // FirstName, but not the new line characters
12345 Wagner Rick 41 30
88888 Mozart Wolfie 36 40
65432 Chopin Fred 45 23.25
72345 Strauss Butch 50 25见评论。
用于nextLine()状态的javadoc
此方法返回当前行的其余部分,不包括末尾的任何行分隔符。
因此,nextDouble()调用试图读取不属于double类型的行分隔符,因此抛出一个InputMismatchException。
如果要在行上使用每个令牌,请使用
EmpID = input.next();
LastName = input.next();
FirstName = input.next();
Hours = input.nextDouble();
Rate = input.nextDouble();用于next()状态的javadoc
从这个扫描器中查找并返回下一个完整的令牌。一个完整的标记在前面,后面是匹配分隔符模式的输入。
默认情况下,分隔符为
Pattern.compile("\\p{javaWhitespace}+");即。空白人物。
Java命名约定规定变量名应该以小写字母字符开头。
https://stackoverflow.com/questions/18836819
复制相似问题