1

我在搜索一些答案时遇到了以下代码。

public static void recurse(Scanner in, HashMap<String, Integer> oldMap) {
    HashMap<String, Integer> map = null;
    if (oldMap == null) 
        map = new HashMap<String, Integer>();
    else
        map = new HashMap<String, Integer>(oldMap);
    while (in.hasNext) {
        String s = in.nextLine();
        if (s.startsWith("[")) {
            recurse(in, map);
            continue;
        }
        if (s.startsWith("]")) {
            break;
        }
        String[] split = s.split(" ");
        if (s.startsWith("print")) {
            System.out.println(map.containsKey(split[1]) ? map.get(split[1]) : 0);
            continue;
        }
        int x = 0;
        try {
            x = Integer.parse(split[1]);
        } catch (Exception e) {
            x = map.containsKey(split[1]) ? map.get(split[1]) : 0;
        }
        map.put(split[0], x);
    }
}

有人可以解释一下,为什么这个人在递归调用之后使用了 continue 。似乎是不会处理 continue ,因为每次都会处理递归调用。

4

2 回答 2

4

确实,递归调用将被处理——但最终,递归调用将返回。(除非它引发异常或进入无限循环,即。)递归调用返回后,continue执行该语句。

它可能会帮助您玩一个更简单的递归示例:

public void printOneToN(int n) {
    if(n > 1) {
        printOneToN(n - 1);
    }
    System.out.println(n);
}

正如您通过运行 (say) 所看到的printOneToN(10),在每次递归调用之后,控制权都会返回给它的调用者。递归调用不会替换其调用者。

于 2013-02-08T18:07:14.247 回答
1

continue与递归调用无关;其效果是跳过while循环的其余内容并直接返回in.hasNext().

于 2013-02-08T18:06:43.970 回答