计算周薪 - 总价值不正确
这里是我的任务细节:计算周薪 - 总价值不正确
编写一个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");
}
}
问题在于这种方法。
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世界,并进一步祝你好运。
太棒了!有效!感谢您的帮助! – Mathlete
不客气。请记住接受答案(点击绿色勾号),如果您觉得有用,请将其提高。 – vikingsteve
你打电话calculateSalary()
,这将更新总,但后来你打电话后increaseHours()
,所以increaseHours()
还需要的代码将更新总。
我会建议不要把你的TotalPayout计算放在构造函数里面。为它做一个单独的方法(就像你为calculateSalary做的那样),然后你可以随时调用这个方法。
当您在Payroll类中增加工资时,会出现问题,因此您不会更新totalPayout变量。
public void increaseHours(double x) {
hours = x + hours;
totalPayout += x * hourly_Rate;
}
我建议你检查你的代码,并且不使用静态变量和方法来总结所有的工资对象(它是一个对象,而不是工资工具类),你有一些未使用的变量,并作为卢德写道,属性应该是小写,所以其他的东西。
不只是代码转储,最大限度地减少你的问题,并告诉我们你做了什么,以及你在挣扎什么。 –
使用浮点确切的货币价值是顽皮的。以整数类型工作。 – Bathsheba
属性应该是小写btw –