2017-02-23 75 views
-1

我想从txt文件返回某些有关基于工资的员工的变量,代码将编译但不能打印出来。 这是我目前已经在我的项目完成:帮助空指针异常

public class PayrollPreparation { 

    private File source; 
    private Scanner input; 
    private String payrollType; 
    private int employeeID; 
    private String employeeName; 
    private int hoursWorked; 
    private double payRate; 
    private double straightPay; 

    public void printEmployeeData() { 
     System.out.println("Employee ID   Name  Hours Worked  Pay  Amount"); 

     try { 
      source = new File("Payroll.txt"); 
      input = new Scanner(source); 
      input.useDelimiter("[,\n]"); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 

     while (input.hasNext()) { 
      if (payrollType.equals("S")) { 
       employeeID = input.nextInt(); 
       employeeName = input.next(); 
       hoursWorked = input.nextInt(); 
       payRate = input.nextDouble(); 
       payrollType = input.next(); 
       straightPay = (hoursWorked * payRate); 

       System.out.println(" " + employeeID + "   " + employeeName 
         + "            " 
         + hoursWorked + "  " + straightPay); 

       input.nextLine(); 
      } 
     } 
     System.out.println("No More Salaried Employees."); 
    } 
} 

代码中所有编译但测试时没有与if声明一个错误,它说java.lang.NullPointerException: null

+0

我没有显示它,但我已经导入了必要的包:import java.util。*; import java.io.File; – Chris

+0

我们可以在记事本中查看您的内容吗? – FreedomPride

+2

你不''任何地方'payrollType'初始化。在代码 –

回答

0

你的财产payrollType永远不会初始化。

在空对象上调用equals方法时,此结果为NullPointerException。

最好的做法是总是比较一个常量(在你的情况下字母S)与一个对象。

所以你的代码应该是“S”.equals(payrollType)。