0
import java.util.*;
import java.io.*;

public class PayrollDemo{
    public static void main(String[]args) throws FileNotFoundException {
        Scanner input = new Scanner("Output.txt");
        Employee employee = readEmployee(input);  // <------ error here
        input.useDelimiter("\t");
        while(input.hasNext())
        {
            readEmployee(input);
            printDetail(employee);
        }
        input.close();
    }

    public static Employee readEmployee(Scanner s) 
    {
        String name = s.next();
        int id = s.nextInt();     // <------ error here
        double hourlyPayRate = s.nextDouble();
        double hoursWorked = s.nextDouble();
        Employee emp = new Employee(name, id);
        emp.SethourlyPayRate(hourlyPayRate);
        emp.SethoursWorked(hoursWorked);
        return emp;
    }   

    public static void printDetail(Employee e)
    {
        System.out.printf(e.getName()+ "    " + e.getId()+ "    " + e.GethourlyPayRate()+ " " + e.GethoursWorked()+ "   " +e.GetGrossPay());
    }
}

私のコードは、スキャナから int を読み取らず、次のメッセージを返します: NoSuchElementException. また、エラーは Employee employee readEmployee(input) も指しています。

4

2 に答える 2

1

実行中にファイルで使用できる要素がないようですs.nextInt()

next()を呼び出すときScannerは、 を使用して、要素が使用可能かどうかを常に確認することをお勧めしますhasNext()

例:

if(s.hasNextInt())   //while (or) if or whatever you want to use.
{
 int id = s.nextInt(); 
}
于 2013-02-08T21:16:20.233 に答える
1

入力の存在を確認する前に入力を読み取らないでください。を使用Scanner#hasNextXXXする前にメソッドを使用してくださいScanner#nextXXXScanner.next()また、またはScanner#nextIntまたはメソッドを使用するたびにScanner#nextDouble、読み取られない改行文字が残るため、 への空白の呼び出しを使用してそれを消費する必要がありますScanner#next()

したがって、public static Employee readEmployee(Scanner s)メソッドの最初の 4 行を次のように置き換えます。

// Use conditional operator to test for any available input. 
// If no input is available, just give a default from your side.
String name = s.hasNext() ? s.next() : "";
s.next();
int id = s.hasNextInt() ? s.nextInt(): 0;     // <------ error here
s.next();
double hourlyPayRate = s.hasNextDouble() ? s.nextDouble(): 0.0;
s.next();
double hoursWorked = s.hasNextDouble() ? s.nextDouble(): 0.0;
s.next();
于 2013-02-08T21:18:10.040 に答える