除了for每个循环中的最后一行外,其他所有行都将被跳过



我目前正在编写一个在节点之间遍历的递归算法(DFT(。但有一件非常奇怪的事情发生了,我的for each循环跳过了里面的几行,但只打印出里面if语句后面的内容。

这就是我的Main.java的

g.addNode("A");
g.addNode("B");
g.addNode("E");
g.addEdge("A", "B");
g.addEdge("A", "E");

g.traverseDepthFirst("A");

非常简单,只需添加节点,然后将它们相互连接(addEdge(。

现在,在我的递归方法中,事情变得非常奇怪。

public void traverseDepthFirst(String root) {
var node = nodes.get(root);
if (node == null) {
return;
}
traverseDepthFirst(node, new HashSet<>());
}
private void traverseDepthFirst(Node root, Set<Node> visited) {
System.out.println("Node: " + root);
visited.add(root);
System.out.println("Visited: " + visited);
for (var node : adjacencyList.get(root)) {
System.out.println("I happened!");
System.out.println(root + " contains " + adjacencyList.get(root));
System.out.println("Node from adjacencyList: " + node);
if (!visited.contains(node)) {
System.out.println("Happened!");
traverseDepthFirst(node, visited);
}
System.out.println("Why are the lines before me not getting printed out?!");
}
}

当我到达节点"0"时;B";以及";E〃;System.out.println行("为什么我之前的行没有打印出来?!"(之前的所有行都被跳过。

这是我得到的输出。

Node: A
Visited: [A]
I happened!
A contains [B, E]
Node from adjacencyList: B
Happened!
Node: B
Visited: [A, B]
Why are the lines before me not getting printed out?!
I happened!
A contains [B, E]
Node from adjacencyList: E
Happened!
Node: E
Visited: [E, A, B]
Why are the lines before me not getting printed out?!

这怎么可能?当我到达名为B的节点或名为E的节点时,为什么会跳过for每个循环内的行?我知道它们没有任何边相互连接,但为什么System.out.println("为什么我前面的行没有打印出来?!"(行被触发,而System.out.print("我碰巧!"(没有被触发?我的for是倒退还是什么的?这太奇怪了,为什么我的System.out.println被忽略了,除了if语句后面的那个?

我试图通过插入函数调用和标记这些输出来使执行顺序更容易阅读。我希望它能有所帮助。你可以看到为什么我前面的行没有打印出来被打印的次数与我发生的次数相同,所以没有跳过任何内容。

traverseDepthFirst(A, #{})
Node: A
Visited: [A]
for node <- B
I happened!
A contains [B, E]
Node from adjacencyList: B
Happened!
traverseDepthFirst(B, #{A})
Node: B
Visited: [A, B]
Why are the lines before me not getting printed out?!
for node <- E
I happened!
A contains [B, E]
Node from adjacencyList: E
Happened!
traverseDepthFirst(E, #{A, B})
Node: E
Visited: [E, A, B]
Why are the lines before me not getting printed out?!

相关内容

最新更新