读取文件中的int时出现错误NoSuchElementException

时间:2013-02-08 21:15:12

标签: java error-handling int

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());
    }
}

我的代码没有从Scanner中读取int返回消息:NoSuchElementException。并且该错误还指向Employee员工readEmployee(输入)。

2 个答案:

答案 0 :(得分:1)

在执行s.nextInt()

时,您的文件中似乎没有任何可用元素

当您对next()进行Scanner次呼叫时,最好使用hasNext()检查元素是否可用。

示例:

if(s.hasNextInt())   //while (or) if or whatever you want to use.
{
 int id = s.nextInt(); 
}

答案 1 :(得分:1)

在检查输入是否存在之前,切勿读取输入。在使用Scanner#hasNextXXX之前使用Scanner#nextXXX方法。此外,无论何时使用Scanner.next()Scanner#nextIntScanner#nextDouble方法,都会留下未读取的换行符,因此您需要使用空格调用{ {1}}。

因此,将Scanner#next()方法的前4行替换为:

public static Employee readEmployee(Scanner s)