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(输入)。
答案 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#nextInt
或Scanner#nextDouble
方法,都会留下未读取的换行符,因此您需要使用空格调用{ {1}}。
因此,将Scanner#next()
方法的前4行替换为:
public static Employee readEmployee(Scanner s)