计算周薪 - 总价值不正确

问题描述:

这里是我的任务细节:计算周薪 - 总价值不正确

编写一个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 –

问题在于这种方法。

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

你打电话calculateSalary(),这将更新总,但后来你打电话后increaseHours(),所以increaseHours()还需要的代码将更新总。

我会建议不要把你的TotalPayout计算放在构造函数里面。为它做一个单独的方法(就像你为calculateSalary做的那样),然后你可以随时调用这个方法。

当您在Payroll类中增加工资时,会出现问题,因此您不会更新totalPayout变量。

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

我建议你检查你的代码,并且不使用静态变量和方法来总结所有的工资对象(它是一个对象,而不是工资工具类),你有一些未使用的变量,并作为卢德写道,属性应该是小写,所以其他的东西。