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() です。小数点以下がなくても double をスキャンできますか?
これを手で書き出すと、スキャナーが 42345 で始まることがわかり、これが EmpID に設定され、スキャナーは空白を超えて次のように進みます。
Bruch でこれを LastName に設定すると、scanner は空白を超えて Max に進み、これを FirstName に設定します。次に、scanner は空白を超えて 40 に進み、これを Hours に設定する必要があります???? スキャナを正しくフォローしていませんか?