我在搜索一些答案时遇到了以下代码。
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,因为每次都会处理递归调用。
最佳答案
递归调用确实会被处理——但最终,递归调用会返回。 (除非它引发异常或进入无限循环,即。)递归调用返回后,执行 continue
语句。
它可能会帮助您玩一个更简单的递归示例:
public void printOneToN(int n) {
if(n > 1) {
printOneToN(n - 1);
}
System.out.println(n);
}
正如您通过运行(比方说)printOneToN(10)
所见,在每次递归调用之后,控制权返回给它的调用者。递归调用不会替换其调用者。
关于java - 递归中的continue关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778671/