跟踪算法



描述调用 getSpend 时的操作顺序,其中 "P3" 作为 参数。返回的值是什么?

法典:

public class Spends {
private String[] d = {"P1", "10", "15", "P2", "12",
"23", "38", "P3", "3", "P4"};
public int getSpend(String id) {
int spend = 0;
boolean done = false;
for (int i = 0; i < d.length && !done; i++) {
if (d[i].equals(id)) {
for (int j = i-1; j >= 0 && isAmount(d[j]); j--) {
spend += Integer.parseInt(d[j]);
}
done = true;
}
}
return spend;
}

public boolean isAmount(String s( {

返回 s.charAt(0( != 'P';

}

我对例程isAmount()做了一个假设,因为它没有指定这是什么语言,所以我不知道它是内置的,还是在其他地方提供的,例如作为类 Spends 的成员函数。

无论如何,我将假设它的参数是编码为字符串的纯整数,则返回true,即"10",如果字符串中有非数字,它会返回false,例如"P1"

现在,让我们看一下外循环:这将提升d数组,直到找到"P3"。 这将使i等于 7。

第二个循环有什么作用? 考虑一下它如何初始化其控制变量j。 它将在第一次迭代中索引d数组的哪个成员?

该成员能否通过isAmount()测试? 如果是这样,会发生什么,特别是如何修改spend

进入下一次迭代。d数组中的j索引现在在哪里? 它会通过测试吗,如果是这样,spend会发生什么?

你现在看到它正在做什么的模式了吗?j在退出循环之前会走多远? 它将迭代d数组的哪些成员,以及如何使用这些值修改spend

最新更新