Мой цикл Java не возвращается обратно в неделю - PullRequest
0 голосов
/ 01 марта 2012

Хорошо, так что часть вторая об этом.Я реструктурировал код на этом, но теперь я не могу найти способ вернуть обратно empWeeklyPay без инициализации его в ноль.И если я инициализирую его нулем, то моя зарплата всегда будет равна нулю?Кто-нибудь может придумать, что я могу сделать?

public double getWeeklyPay()//Call the getWeeklyHours method of the Emp's timecard to      get the total
//hours worked and then multiply the returned value by the emp's hourly rate and return the value.
{
TimeCard empTimeCard = timeCard;
double empWeeklyPay;
double totalOtHours;
double totalRegHours;
int i = 0;

while(i <= empTimeCard.NUMDAYS && empTimeCard.getHoursByDay(i) > 8)
{
double empHourlyRate = getHourlyRate();
double otHours = 0;
double regHours = 0;
double sumOtHours = 0;
int sumRegHours = 0;

//grabbing the overtime and reghours and storing them
otHours = empTimeCard.getHoursByDay(i) % 8;
regHours = empTimeCard.getHoursByDay(i) - otHours;
sumOtHours += otHours;
sumRegHours += regHours;
double tmpBasePay = (sumRegHours * empHourlyRate) + (sumOtHours * empHourlyRate * 1.5);

if(Integer.toString(getEmployeeId()).charAt(0) == '0' || Integer.toString(getEmployeeId()).charAt(0) == '2'
|| Integer.toString(getEmployeeId()).charAt(0) == '9')
//Java reads in 1010 so need to convert to a string to do a count on the value.
{
  tmpBasePay += (tmpBasePay * .10);        
  i++;
}
else if(Integer.toString(getEmployeeId()).charAt(0) == '3')
{
  tmpBasePay -= (tmpBasePay *.10);
  i++;
}
else if(Integer.toString(getEmployeeId()).charAt(0) == '8')
{ 
  tmpBasePay += (tmpBasePay * .20);
  i++;
}
totalRegHours = regHours;
totalOtHours = sumOtHours;
if(totalRegHours > 34)
{
tmpBasePay -= (tmpBasePay * .06);
//empWeeklyPay = tmpBasePay;
empWeeklyPay = tmpBasePay;
}
else
{
empWeeklyPay = tmpBasePay;
}

}

return empWeeklyPay;// <---need to return back this value.   

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Ваш первый цикл while пока выполняется только одна итерация, поскольку он всегда встречает ключевое слово return.return выведет вас из цикла while и вашего getWeekPay().

Вам просто нужно вернуть переменную empWeeklyPay в конце вашего метода, поэтому здесь полезен только последний возврат.Конец вашего метода должен выглядеть следующим образом:

if(RegHours > 34) {
    empBasePay -= (empBasePay * .06);
    empWeeklyPay = empBasePay;
} else {
    empWeeklyPay = empBasePay;
}
return empWeeklyPay;

РЕДАКТИРОВАТЬ

Почему вы всегда получаете 0:

double empBasePay = (RegHours * empHourlyRate) + (otHours * empHourlyRate * 1.5);

Как RegHours и otHours равны 0, вы также можете написать:

double empBasePay = 0;

А так как остальная часть метода основана на базовом значении empBasePay, которое равно 0, ваш метод всегда будетвозврат 0.

1 голос
/ 07 марта 2012

Вот ответ на мой вопрос.Я был в состоянии понять это.Пожалуйста, смотрите код ниже на случай, если кто-то еще столкнется с этой же проблемой в ближайшем или отдаленном будущем:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...