我在搜索一些答案时遇到了以下代码。
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。
答案 0 :(得分:4)
确实会处理递归调用 - 但最终,递归调用将返回。 (除非它引发异常或进入无限循环,否则。)在递归调用返回后,执行continue
语句。
这可能有助于您使用更简单的递归示例:
public void printOneToN(int n) {
if(n > 1) {
printOneToN(n - 1);
}
System.out.println(n);
}
正如您通过运行(说)printOneToN(10)
所看到的,在每次递归调用之后,控制权返回其调用者。递归调用不会替换其调用者。
答案 1 :(得分:1)
continue
与递归调用无关;其效果是跳过while
循环的其余内容并直接返回in.hasNext()
。