跟踪算法

时间:2018-08-22 01:29:09

标签: loops tracing

描述以“ 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';

}

1 个答案:

答案 0 :(得分:1)

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

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

现在,让我们看一下外部循环:它将逐步增强d数组,直到找到"P3"。这将使i等于7。

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

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

转到下一个迭代。 j数组中的d索引现在在哪里?它可以通过测试吗?如果可以,spend会怎样?

您现在看到其运行方式了吗? j在退出循环之前走了多远?它会迭代d数组的哪些成员,以及如何用这些值修改spend