2012-10-30 205 views
1

第一次在這裏發佈海報。我處於我的繩索末端,準備放棄我對編程職業的追求。我沒能完成我的最後一項任務,因爲我無法讓我的程序正常工作。現在,我正在自己做一些額外的練習。一個簡單的練習分配使用數組,我無法弄清楚它的最後一點。有人可以告訴我我在做什麼錯嗎?當我運行它,我可以輸入數據,但在此之前與此錯誤顯示輸出該程序退出:使用Java陣列計算

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

預先感謝您的幫助!

燕姿

+5

東西不能爲空是線47哪條線是空? 「java:XX」部分是指代碼中的行號。檢查你的數組的初始化。哦,不要放棄! – keyser

+0

@Keyser感謝您的鼓勵。現在我已經有好幾天的眼淚了。不是這個程序,而是通過我無法弄清楚的程序。但是,無法弄清楚這種簡單的東西更令人沮喪。 – speedracer

回答

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

祝你好運!

1

NullPointerException這裏存在的:

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

因爲你沒有初始化的double陣列grossPay(或payRatewages)。你可以使用:

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

還您需要:

private double[] payRate = new double[NUM_EMPLOYEES]; 
private double[] wages = new double[NUM_EMPLOYEES]; 
0

array grossPay從未初始化在內部工資 public double [] getGrossPay()。

您需要在使用之前初始化數組的大小。

可能是最好的辦法是將構造函數添加:

public Payroll() { 
grossPay= new double[NUM_EMPLOYEES]; 
} 
+0

大家好,謝謝!我怎麼能忽略這個?我知道的更好,但我認爲我對這一切感到非常沮喪,以致於無法思考。我的程序現在完美運行! – speedracer