Для каждого заданного значения цикла

63
5

Запуск проблемы. У меня есть два метода for each цикла, который вычисляет, что руководители платят либо в процентах, либо за базовую плату. В моем классе Executive у меня есть мой метод оплаты, который берет базовую ставку оплаты и умножается на бонус. Это работает, если он процент, но если его базовая оплата и вызов этого метода не работают. Я поставил оператор if в моем исполнительном классе, чтобы узнать, оплачивается ли процент или базовая плата?

Класс персонала

/**
* Assigns the specified flat value weekly bonus to the Executives.
*
* @param bonusValue
* as a double, i.e., $1,000 = 1000.0
*/

public void setExecutiveBonusFlatRate(double bonusValue) {
for (StaffMember executiveEmployee : staffList) {
if (executiveEmployee instanceof Executive) {
((Executive) executiveEmployee).setBonus(bonusValue);

}
}
}

/**
* Assigns the specified percentage weekly bonus to the Executives.
*
* @param bonus
* as a percentage, i.e., 20% = 0.2
*/

public void setExecutiveBonusPercentage(double bonusPercentage) {
for (StaffMember executiveEmployee : staffList) {
if (executiveEmployee instanceof Executive) {
((Executive) executiveEmployee).setBonus(bonusPercentage);

}
}
}

/**
* Pays all the staff members.
*/

public void payday() {
for (StaffMember allEmployee : staffList) {
allEmployee.toString();
System.out.println(allEmployee.pay());
System.out.println(allEmployee.toString());
}
}

Из класса Executive, расширенного от Employee

/**    @overide
* return the weekly payrate plus the bonus
*/

public double pay() {

double payment = payRate * bonus;
bonus = 0;
return payment;

спросил(а) 2021-01-19T12:50:19+03:00 6 месяцев назад
1
Решение
63

Здесь нужно исправить две вещи:

setExecutiveBonusPercentage должен установить бонус как base * percentage * 0.01 bonusValue base * percentage * 0.01 чтобы быть совместимым с bonusValue установленным в setExecutiveBonusFlatRate поскольку у нас нет способа узнать, является ли bonus значением или процентом.

В методе pay() мы устанавливаем бонус на 0 (bonus = 0;), который нужно удалить, когда он сбрасывает значение бонуса. В связи с этим, первый вызов pay() вернет правильный результат, тогда как последующие вызовы возвратят 0.

ответил(а) 2021-01-19T12:50:19+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема