抱歉,只是为了准备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
}
}
我无法确定下一步该怎么做,有人能帮我这个吗?
答案 0 :(得分:4)
有一个提示要求策略枚举模式。这是一个起点:
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
答案 1 :(得分:2)
根据Andreas_D的建议,您应该看一下策略枚举模式;例如,见article。
以下是一些快速入侵的代码:
public enum PayRoll {
MONDAY {
public double pay( double time, double payrate ) {
if (time <= 8)
return payrate * time;
else
return payrate * 8 + payrate * (time - 8) / 2;
}
},
// implement TUESDAY, WEDNESDAY,THURSDAY, FRIDAY
SATURDAY {
public double pay( double time, double payrate ) {
return payrate * time / 2;
}
},
// implement SUNDAY
BANK_HOLIDAY {
public double pay( double time, double payrate ) {
return payrate * 1.5 * time / 2;
}
};
public abstract double pay(double time, double payrate);
}
有了这些,您可以执行以下操作:
public static void main(String[] args) {
PayRoll christmasDay = PayRoll.BANK_HOLIDAY;
System.out.println(christmasDay.pay(5, 3));
}