1

初めてのポスターはこちら。私は私のロープの終わりにいて、プログラミングのキャリアの追求をあきらめる準備ができています。プログラムを動作させることができなかったため、最後の課題を提出できませんでした。今、私は自分でいくつかの追加の練習をしています。配列を使用した単純な練習の割り当てで、最後の部分がわかりません。誰かが私がここで間違っていることを教えてもらえますか?実行するとデータを入力できますが、出力が表示される前にプログラムが終了し、次のエラーが発生します。

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

よろしくお願いします!

ステフ

4

3 に答える 3

1

あなたNullPointerExceptionはここで起こっています:

grossPay[count] = getEmpPayRate()[count] * getEmpHours()[count];

doubleアレイgrossPay(またはpayRateまたは )を初期化していないためwages。あなたが使用することができます:

private double[] grossPay = new double[NUM_EMPLOYEES];

また、次のものが必要です。

private double[] payRate = new double[NUM_EMPLOYEES];
private double[] wages = new double[NUM_EMPLOYEES];
于 2012-10-30T19:34:08.223 に答える
1

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

幸運を!

于 2012-10-30T19:34:47.223 に答える
0

配列grossPayは、public double [] getGrossPay()のPayroll内で初期化されることはありませんでした。

使用する前に、配列のサイズを初期化する必要があります。

おそらく、コンストラクターを追加するのが最善でしょう。

public Payroll() {
grossPay= new double[NUM_EMPLOYEES];
}
于 2012-10-30T19:37:31.650 に答える