抱歉,只是为了准备 Java 考试而尝试做一道过去的考试题,希望有人能告诉我我的答案是否正确。问题:
使用 Java 枚举,实现一个用于工资单计算的类。类中的常量对应于一周中的正常日期:星期一、星期二...星期五、周末:星期六和星期日以及银行假日,这是一周中的特殊节日。
该类应提供一个实例方法double pay (double time, double payrate)
,它返回当天工作的员工的总工资。计算规则如下:
给定日期的工资
base pay = pay rate * hours worked.
在这里,基本工资由下式给出:
base pay = pay rate * hours worked
当天的加类费由
overtime pay = pay rate * overtime hours/2
加类时间视日期而定。
正常工作日:对于正常工作日,加类时间是指当天超过 8 小时的工作时间。
周末:对于周末,加类时间是当天工作的时间。
银行假日:对于银行假日,加类时间是当天工作时间的 1.5 倍。
确保您的类是可维护的。应该可以在不破坏现有代码的情况下添加和删除。提示:使用策略枚举模式实现您的类。
public class Payroll {
public enum Day {
MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY, SUNDAY, BANK HOLIDAY;
}
public double pay( double time, double payrate ) {
if ( day
}
}
我真的不知道下一步该去哪里,有人能帮我解决这个问题吗?
最佳答案
有提示要求策略枚举模式。这是一个起点:
public enum Day {
MONDAY(Type.NORMAL), TUESDAY(Type.NORMAL), WEDNESDAY(Type.NORMAL),
THURSDAY(Type.NORMAL), FRIDAY(Type.NORMAL), SATURDAY(Type.WEEKEND),
SUNDAY(Type.WEEKEND), BANK_HOLIDAY(Type.BANK_HOLIDAY);
private Type type; // <- the strategy
private Day(Type type) {this.type=type;}
public double pay(double time, double payRate) {
// calculate the pay using the strategy: type.overtimePay(hours, payRate)
}
private enum Type {
NORMAL {
@Override
double overtimePay(double hours, double payRate) {
// TODO: implement
}
}
// same for WEEKEND and BANK_HOLIDAY
abstract double overtimePay(double hours, double payRate);
}
}
所以现在,如果你想计算工资,应该可以用
double pay = Day.MONDAY.pay(10.5, 16.50);
或使用方便的(尚未实现的方法):
double pay = getDay(aDate).pay(10.5, 16.50); // getDay returns a Day enum
关于java - 使用 Java 实现枚举工资单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046080/