1

基本上我在返回值时需要一种延迟:因此,如果我的方法 SlowThinker 被赋予字符串“Hello”,然后是“Goodbye”,然后是“See you later”,它需要返回“”(空字符串),然后是“ Hello”,然后是“Goodbye”(依此类推,总是在其当前输入之后一个)。

到目前为止,我试图将所有输入保存在一个数组中,但我无法弄清楚我在实现中做错了什么:

public class SlowThinker {
private String[] sayings = new String[20];
private int i = 0;
public int increment(){
    while(true){
        i++;
        return i;
    }
}
public String transform(String stringToTransform){
    sayings[0] = "";
    sayings[increment()] = stringToTransform;
    return sayings[increment()-1];
}

}

我还在另一个班级中使用以下内容作为我的测试人员:

assertEquals("", this.slowThinkerOne.transform("Return This Later"));
    assertEquals("Return This Later", this.slowThinkerOne
            .transform("One More Time"));
    assertEquals("One More Time", this.slowThinkerOne.transform(""));
    assertEquals("", this.slowThinkerTwo.transform("This is the Last Time"));

非常感谢!

4

2 回答 2

1

您在方法中调用increment()了两次transform()。您可以通过将值存储在临时变量中来修复它。

int val = increment();
sayings[val] = stringToTransform;
return sayings[val];
于 2013-03-12T04:37:20.767 回答
0

函数式编程的对立面。返回值不是仅基于参数,而是仅基于先前调用的参数。

public class SlowThinker {
    private String last = "";

    public String transform(String saying) {
        String response = last;
        last = saying;
        return response;
    }
}
于 2013-03-12T05:11:44.037 回答