第一次海报在这里。我已经走到尽头了,准备放弃我从事编程职业的追求。我无法完成上一个作业,因为我无法使程序正常运行。现在,我自己进行一些额外的练习。使用数组的简单练习作业,我无法弄清数组的最后一部分。有人可以告诉我我在做什么错吗?当我运行它时,我可以输入数据,但是程序在显示输出之前退出,但出现以下错误:

Exception in thread "main" java.lang.NullPointerException
     at Payroll.getGrossPay(Payroll.java:47)
     at PayrollCalc.main(PayrollCalc.java:32)


我可以分别显示小时数和payRate,但不能显示GrossPay。我对构造函数也不满意,但不确定如何处理。问题要求我初始化Payroll类中的数组。



public class Payroll {
    private final int NUM_EMPLOYEES = 3;
    private int[] employeeId = {5658845, 4520125, 7895122}, empId, hours;
    private double[] payRate, wages, grossPay;

    public Payroll()
{
    empId = employeeId;
}
public void setEmployeeId(int[] employeeId)
{
    empId = employeeId;
}
public void setEmpHours(int[] empHoursIn)
{
    hours = empHoursIn;
}
public void setEmpPayRate(double[] empPayRateIn)
{
    payRate = empPayRateIn;
}
public int[] getEmployeeId()
{
    return empId;
}
public int[] getEmpHours()
{
    return hours;
}
public double[] getEmpPayRate()
{
    return payRate;
}
public double[] getGrossPay()
{
    for (int count = 0; count < NUM_EMPLOYEES; count++)
    {
        grossPay[count] = getEmpPayRate()[count] * getEmpHours()[count];
    }

    return grossPay;
}
}




导入java.util.Scanner;

public class PayrollCalc
{
public static void main(String[] args)
{
    int count;
    final int NUM_EMPLOYEES = 3;
    int[] empHours = new int[NUM_EMPLOYEES];
    double[] empPayRate = new double[NUM_EMPLOYEES];
    Scanner keyboard = new Scanner(System.in);
    Payroll payroll = new Payroll();

    for (count = 0; count < NUM_EMPLOYEES; count++)
    {
        System.out.print("Enter total hours for employee " +
                           payroll.getEmployeeId()[count] + ": ");
        empHours[count] = keyboard.nextInt();
        payroll.setEmpHours(empHours);

        System.out.print("Enter pay rate for employee " +
                           payroll.getEmployeeId()[count] + ": ");
        empPayRate[count] = keyboard.nextDouble();
        payroll.setEmpPayRate(empPayRate);
    }

    System.out.println("\nEMPLOYEE ID\tGROSS PAY");
    System.out.println("-----------     ---------");

    for (count = 0; count < NUM_EMPLOYEES; count++)
    {
        System.out.println(payroll.getEmployeeId()[count] + "\t\t" +
                           payroll.getGrossPay()[count]);
    }
  }
  }




在此先感谢您的帮助!

斯蒂夫

最佳答案

看起来您从未初始化GrossPay数组-看看是否有所不同:

private double[] payRate, wages;
private double[] grossPay = new double[NUM_EMPLOYEES];


提示,开始时,最好尽快初始化所有变量,这种情况主要是在构造时。当您感到更自在时,然后在需要时进行初始化-例如:

public double[] getGrossPay()
{
  if (grossPay == null) {
    grossPay = new double[NUM_EMPLOYEES];

    for (int count = 0; count < NUM_EMPLOYEES; count++)
    {
      grossPay[count] = getEmpPayRate()[count] * getEmpHours()[count];
    }
  }
  return grossPay;
}


祝好运!

08-18 18:04
查看更多