描述以“ P3”作为调用getSpend时的操作顺序。 参数。返回的值是多少?
代码:
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';
}
答案 0 :(得分:1)
我对例程isAmount()
进行了假设,因为未指定该例程是什么语言,所以我不知道它是内置的还是其他地方提供的,例如作为Spends类的成员函数。
无论如何,如果参数是编码为字符串的纯整数,即true
,我将假定它返回"10"
,如果存在则返回false
字符串中的非数字,例如"P1"
现在,让我们看一下外部循环:它将逐步增强d
数组,直到找到"P3"
。这将使i
等于7。
第二个循环做什么?考虑一下它如何初始化其控制变量j
。它将在d
数组的哪个成员的第一次迭代中建立索引?
该成员将通过isAmount()
测试吗?如果是这样,会发生什么,特别是如何修改spend
?
转到下一个迭代。 j
数组中的d
索引现在在哪里?它可以通过测试吗?如果可以,spend
会怎样?
您现在看到其运行方式了吗? j
在退出循环之前走了多远?它会迭代d
数组的哪些成员,以及如何用这些值修改spend
?