0

Так что я работаю над этим классом зарплаты, мне нужно создать двух сотрудников, отработанных часов и почасовой оплаты и рассчитывать заработную плату. Наконец, я должен добавить 10 дополнительных часов одному из ранее созданных сотрудников и рассчитать и отобразить общую зарплату. Я написал два класса, и все работает отлично, но когда я смотрю на общую зарплату, он не учитывает добавленные часы. Результат для totalPayRoll должен составлять $ 2000 после увеличения количества часов, но я все равно получаю $ 1750!Я пытаюсь понять, почему мой класс начисления заработной платы не добавляет все зарплаты должным образом .... помогите мне найти ошибку

public class PayRoll { 

static double getTotalPayRoll() 
{ 
    return TotalPayRoll; 

} 


public String employeeId; 
public int hoursWorked; 
public final double hourlyPay; 
private static double TotalPayRoll; 
private static double Salary; 



public PayRoll (String theEmployeeId, int theHoursWorked, 
        double theHourlyPay) 
{ 
    this.employeeId = theEmployeeId; 
    this.hoursWorked = theHoursWorked; 
    this.hourlyPay = theHourlyPay; 

    Salary = hoursWorked*hourlyPay; 
    TotalPayRoll = TotalPayRoll + Salary ; 

} 


public String getTheEmployeeId() 
{ 
    return this.employeeId; 
} 

public int getTheHoursWorked() 
{ 
    return this.hoursWorked; 
} 

public double getTheHourlyPay() 
{ 
    return this.hourlyPay; 
} 




public double getSalary() 
{ 
    return PayRoll.Salary; 
} 

public void increase (int extraHours) 
{ 
    hoursWorked = (hoursWorked + extraHours); 
} 


public void changeTheHoursWorked (int amount) 
{ 
    hoursWorked = hoursWorked + amount; 
} 

public void calculateSalary() 
{ 
    Salary = hoursWorked*hourlyPay; 
} 

public void calculateTotalPayRoll() 
{ 
    TotalPayRoll= TotalPayRoll+Salary; 
} 

    public void changeHours(int newHours) 
    { 
     hoursWorked = newHours; 
    } 



} 

И это главный

public class Test { 


    public static void main(String[] args) { 
     // TODO code application logic here 

     Date d = new Date();  
     DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); 
     NumberFormat nf = NumberFormat.getCurrencyInstance(); 

     System.out.println("\nPayroll For Week Ending " + df.format(d)); 
     System.out.println("-------------------------------------"); 
     PayRoll employee1 = new PayRoll("444-4444", 30, 25); 
     employee1.calculateSalary(); 
     displaySalary(employee1, nf); 

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

     System.out.println("Increase " + employee1.getTheEmployeeId() + 
           " by 10 hours"); 
     employee1.changeTheHoursWorked(10); // 10 hours increase 
     employee1.calculateSalary(); 
     displaySalary(employee1, nf); 

     System.out.println("Total payout amount.. " + 
          nf.format(PayRoll.getTotalPayRoll())); 

     } 
     public static void displaySalary(PayRoll e, NumberFormat nf) 
     { 
      System.out.println("Employee #: " + e.getTheEmployeeId()); 
      System.out.println("Hours Worked: " + e.getTheHoursWorked()); 
      System.out.println("Hourly Rate: " + e.getTheHourlyPay()); 
      System.out.println("Your Salary is: " + e.getSalary()); 


      System.out.println("---------------------------------\n"); 
     } 

     } 

ответ

1

Это происходит потому, что у вас есть статические поля - сделать все нестатическим

private static double TotalPayRoll; -> private double TotalPayRoll; 
private static double Salary;  -> private double Salary; 

Что происходит со статическими полями является

Вначале установлено значение часов рабочего времени 30

затем hoursWorked установлен в 20

затем hoursWorked увеличивается на 10

+0

есть 2 разные сотрудники – hhhh

+0

НО, поля являются статическими, это означает, что там будет только один объект –

+0

так, сначала я установил 444-30, а затем увеличился на 10 – hhhh

2

В своем классе:

private static double TotalPayRoll; 
private static double Salary; 

Оба статические члены (члены уровня класса), так что будет только один экземпляр этих членов, который будет разделяться между всеми объектами. Потому что TotalPayRoll и зарплата должна отличаться для разных зарплат, поэтому они должны быть нестатистическими.

0

Поскольку вы объявляете объекты своего класса PayRoll, вам не нужно создавать статические элементы.

Вы можете сделать свой класс, как этого

public class PayRoll { 


//don't have to declare any member public since you have functions to return value 
//don't need access specifier since they are private by default 
String employeeId; 
int hoursWorked; 
double hourlyPay; 
double TotalPayRoll=0; //you have to initialize it to zero 
double Salary; 



public PayRoll (String theEmployeeId, int theHoursWorked, 
        double theHourlyPay) 
{ 
    this.employeeId = theEmployeeId; 
    this.hoursWorked = theHoursWorked; 
    this.hourlyPay = theHourlyPay; 

    // Salary = hoursWorked*hourlyPay; 
    // TotalPayRoll = TotalPayRoll + Salary ; 
    //you do not need to do this since you have different functions for them 

} 

public double getTotalPayRoll() 
{ 
    return this.TotalPayRoll; 

} 


public String getTheEmployeeId() 
{ 
    return this.employeeId; 
} 

public int getTheHoursWorked() 
{ 
    return this.hoursWorked; 
} 

public double getTheHourlyPay() 
{ 
    return this.hourlyPay; 
} 

public double getSalary() 
{ 
    return this.Salary; 
} 

//don't need the increase method 
public void changeTheHoursWorked (int amount) 
{ 
    hoursWorked += amount; 
} 

public void calculateSalary() 
{ 
    Salary = hoursWorked*hourlyPay; 
} 

public void calculateTotalPayRoll() 
{ 
    TotalPayRoll+=Salary; 
} 

    //don't need the change hours function 

} 

Надеется, что это помогает :)

+0

, имеющий проблемы с этим одним из тестов, так как я изменил статические ... – hhhh

+0

// \t System.out.println («Общая сумма выплат ..» + nf.format (PayRoll.getTotalPayRoll)); – hhhh

+0

, пожалуйста, проверьте изменения – Aradhna