描述调用 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
?