试图将我的头缠在哈希图上并获取代码的问题

时间:2019-04-02 01:58:39

标签: java

因此,我很难解决这个编码问题:这是他们要我回答的四个问题: 使用以下输入,“ getValue(…)”将执行多少次,结果将是什么?

(1)getValue(“ foo”,0);

(2)getValue(“ bar”,2);

(3)getValue(“ baz”,0);

(4)getValue(“ fubar”,1);

我知道前两个答案:

1)将执行一次并返回1

2)将执行1次并返回3 但是最后两个问题(3,4)我不明白。任何人都可以帮助澄清这段代码到底在做什么,并提示答案是什么?

代码如下:

import java.util.HashMap;
import java.util.Map;

public class myClass {

private Map<String,Integer> map;

public myClass() {

map = new HashMap<>();

map.put("foo", 1);

map.put("bar", 3);

}

public int getValue(String input, int numRetries) throws Exception {

try {

  return map.get(input);

}

catch (Exception e) {

  if (numRetries > 3) {

    throw e;

  }

  return getValue(input, numRetries + 1);

}

}

谢谢。

1 个答案:

答案 0 :(得分:0)

您在(1)和(2)中正确回答的代码会尝试从HashMap获得给定键的值。

getValue()函数是一个递归函数,这意味着它会根据'numRetries'值多次调用自身

(3)代码调用自身4次(其中numRetries从0、1、2、3开始,直到'> 3'子句变为true并引发异常)

(4)代码调用自身3次(其中numRetries从1,2,3开始,直到'> 3'子句变为true并引发异常)