2017-02-16 97 views
-6

這裏是我的任務細節:計算週薪 - 總價值不正確

編寫一個Java程序,可以用來計算小時薪僱員的週薪。 計劃最初接受員工的ID,工作小時數和小時工資率。 員工可能需要額外工作時間。發生這種情況時,額外的小時數必須加上原始金額 ,並重新計算工資。該程序必須在單獨的 行輸出員工的身份證號碼,工作小時數,小時工資率和工資,對於每個員工 。此外,該方案還必須輸出的錢由 公司

這裏支付的總金額是我到目前爲止

包工資;

public class Payroll 
    { 

    private static double TotalPayout; 
    private double Hours; 
    private double Hourly_Rate; 
    private String EmployeeId; 
    public static double Salary; 
    private double increaseHours = 10; 

public Payroll (String getEmployeeId, double getHours, double 
getHourly_Rate) 
    { 
    EmployeeId = getEmployeeId; 
    Hours = getHours; 
    Hourly_Rate = getHourly_Rate; 
    Salary = Hours * Hourly_Rate; 

    TotalPayout = TotalPayout + Salary; 
    } 

public static double getTotalPayout() 
    { 
    return TotalPayout; 
    } 

public String getEmployeeId() 
    { 
    return EmployeeId; 
    } 
public double getHours() 
    { 
    return Hours; 
    } 
public void increaseHours (double x) 
    { 
    Hours = increaseHours + Hours; 
    } 
public double getHourly_Rate() 
    { 
    return Hourly_Rate; 
    } 
public double calculateSalary() 
    { 
    Salary = Hours * Hourly_Rate; 
    return Salary; 
    } 
    } 


package payroll; 


import java.util.Date;//Used for creating a Date object 
import java.text.DateFormat;//Used for specifying the format of the date 
import java.text.NumberFormat;//Used for specifying the type of currency 


public class TestPayroll 
{ 

public static void main (String [] arg) 
{ 
    //Set up the formatters 
    Date d = new Date(); 
    DateFormat df = DateFormat.getDateInstance(); 
    NumberFormat nf = NumberFormat.getCurrencyInstance(); 


    System.out.println("ABC Company"); 
    System.out.println ("\nPayroll For Week Ending " + df.format (d)); 
    System.out.println("--------------------------------------"); 

    //Define employee 1 

    Payroll employee1 = new Payroll ("444-4444", 30, 25); 
    employee1.calculateSalary(); 
    displaySalary (employee1, nf); 

    //Define employee 2 

    Payroll employee2 = new Payroll ("555-55555", 20, 50); 
    employee2.calculateSalary(); 
    displaySalary(employee2, nf); 

    System.out.println("\tIncrease " + employee1.getEmployeeId() + " by 10 
    hours"); 
    employee1.increaseHours(10); // 10 hours increase 
    System.out.println("\tEmployee # ...... " + employee1.getEmployeeId()); 
    System.out.println("\tHours Worked:.... " + employee1.getHours() + " 
    hours"); 
    System.out.println("\tHourly Rate:..... " + nf.format(employee1.getHourly_Rate()) + "/hour"); 
    System.out.println("\tYour Salary is .. " + nf.format(employee1.Salary)); 
    System.out.println("\t------------------------------"); 

    System.out.println("Total Payout Amount..... " + nf.format(Payroll.getTotalPayout())); 
    System.out.println("-------------End of Report------------"); 
} 
public static void displaySalary (Payroll e, NumberFormat nf) 
{ 
    System.out.println("\tEmployee # ...... " + e.getEmployeeId()); 
    System.out.println("\tHours Worked .... " + e.getHours() + " hours"); 
    System.out.println("\tHourly Rate ..... " + nf.format(e.getHourly_Rate()) + "/hour"); 
    System.out.println("\tYour Salary is .. " + nf.format(e.calculateSalary())); 
    System.out.println("\t------------------------------\n"); 

} 
} 
+1

不只是代碼轉儲,最大限度地減少你的問題,並告訴我們你做了什麼,以及你在掙扎什麼。 –

+0

使用浮點確切的貨幣價值是頑皮的。以整數類型工作。 – Bathsheba

+0

屬性應該是小寫btw –

回答

0

問題在於這種方法。

public void increaseHours (double x) 
{ 
    Hours = increaseHours + Hours; 
} 

首先,您使用了錯誤的字段(increaseHours),而不是x。所以,請刪除此行:

private double increaseHours = 10; 

現在更新方法:

public void increaseHours (double increaseHours) 
{ 
    Hours = increaseHours + Hours; 
    TotalPayout += increaseHours * Hourly_Rate; 
} 

這將解決您的問題的,但現在我使用static領域TotalPayout強烈建議 - 這將需要你稍微重新設計。

此外,一些風格指針。以變​​量/字段的小寫字母開頭的駱駝案例。例如而不是TotalPayout。等等。

歡迎來到S.O.和java世界,並進一步祝你好運。

+0

太棒了!有效!感謝您的幫助! – Mathlete

+0

不客氣。請記住接受答案(點擊綠色勾號),如果您覺得有用,請將其提高。 – vikingsteve

1

你打電話calculateSalary(),這將更新總,但後來你打電話後increaseHours(),所以increaseHours()還需要的代碼將更新總。

我會建議不要把你的TotalPayout計算放在構造函數裏面。爲它做一個單獨的方法(就像你爲calculateSalary做的那樣),然後你可以隨時調用這個方法。

0

當您在Payroll類中增加工資時,會出現問題,因此您不會更新totalPayout變量。

public void increaseHours(double x) { 
    hours = x + hours; 
    totalPayout += x * hourly_Rate; 
} 

我建議你檢查你的代碼,並且不使用靜態變量和方法來總結所有的工資對象(它是一個對象,而不是工資工具類),你有一些未使用的變量,並作爲盧德寫道,屬性應該是小寫,所以其他的東西。