如何简化public void work(int hours)循环?

时间:2015-03-13 13:49:03

标签: java

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);
}

要求简化公共无效工作的循环,我不知道如何,任何帮助将不胜感激。

2 个答案:

答案 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);
    }
}