public static final int RETIREMENT_AGE = 65;
public Worker(String name, float hourlyIncome, int age,
Worker coWorker) {
this.name = name;
this.hourlyIncome = hourlyIncome;
this.age = age;
this.coWorker = coWorker;
}
public void work(int hours) {
for(int i = 1; i<=hours; i++) {
earned += hourlyIncome;
if(coWorker!=null && i%5==0)
delegate(1); // from time to time
}
}
public void work() {
while(age++ < RETIREMENT_AGE)
work(1600);
}
private void delegate(int hours) {
coWorker.work(hours);
}
要求简化公共无效工作的循环,我不知道如何,任何帮助将不胜感激。
答案 0 :(得分:0)
这应该做同样的事情......
public void work(int hours) {
earned += hourlyIncome * hours;
if(coWorker != null){
delegate(hours / 5);
}
}
除了委托方法变得更复杂并且某些内部状态基于此变化。
编辑:在这种情况下,您可以执行类似
的操作public void work(int hours) {
earned += hourlyIncome * hours;
if(coWorker != null){
final int coworkerHours = hours / 5;
for(int i = 0 ; i < coworkerHours; i++){
delegate(1);
}
}
}
答案 1 :(得分:0)
您的方法是在无参数work
方法中每次围绕循环将年龄增加1。根据您在方法中的操作,可能会减少工作呼叫的数量(1600)。
具体来说,如果work(2 * n);
产生与work(n); work(n);
相同的结果,您只需计算退休前的总小时数,并只需一次工作()。
public void work() {
if(age < RETIREMENT_AGE) {
work((RETIREMENT_AGE - age) * 1600);
}
}