Java 对空指针异常的帮助
我试图从一个txt文件返回一些关于基于工资的员工的变量,代码将被编译,但不会打印出来。 这就是我目前在项目中所做的:Java 对空指针异常的帮助,java,nullpointerexception,Java,Nullpointerexception,我试图从一个txt文件返回一些关于基于工资的员工的变量,代码将被编译,但不会打印出来。 这就是我目前在项目中所做的: public class PayrollPreparation { private File source; private Scanner input; private String payrollType; private int employeeID; private String employeeName; private
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
您的属性payrollType从未初始化
在null对象上调用equals方法时,这将导致NullPointerException
最好的做法是将常量(在您的例子中是字母S)与对象进行比较
因此,您的代码应该是“S”.equals(payrollType)。我没有显示它,但已经导入了必要的包:import java.util.*;导入java.io.File;我们可以在记事本中查看您的内容吗?您在任何地方都不能
payrollType
inititalized。在代码中,它总是null
,payrollType
为null,因为在if语句中才设置它。您不能对空变量使用.equals
。调试NullPointerException的启发式方法几乎总是一样的:您应该仔细阅读异常的堆栈跟踪,找到出现故障的代码行,即引发异常的代码行,然后仔细检查该行,找出哪个变量为空,然后追溯到你的代码,看看原因。相信我,你会一次又一次地碰到这些。今后,请在发布之前搜索该主题,因为这是一个太常见的问题,无法发布另一个NPE问题。