我没有找到与此主题相关的问题。
我正在使用后缀树的这种实现:http://en.literateprograms.org/Suffix_tree_%28Java%29
正如您在此链接中所看到的,树的节点具有递归调用自身的toString()方法 - 它显示节点及其子节点的表示。这个方法每次调用时都会增加一个静态整数变量(它是静态的,所以它的值在调用之间保留)。
当我使用Eclipse Debugger暂停执行代码时,我可以将鼠标悬停在节点变量上以查看其值。问题是Eclipse调用toString()方法来显示变量的内容,所以每次检查节点的值时,静态变量都会增加,而程序暂停。
我不知道在调试时如何阻止Eclipse显示toString()方法。此外,我还没有找到一种方法来更改方法,因此它可以在不使用静态变量的情况下以相同的方式工作。这两种解决方案对我有帮助,但第一种解决方案对我来说更有趣。你会做什么?
PS:我添加了SuffixTreeNode的toString()方法的代码。请查看上一个链接了解更多详情。
SuffixTreeEdge incomingEdge = null;
int nodeDepth = -1;
int label = -1;
Collection<SuffixTreeNode> children = null;
SuffixTreeNode parent = null;
int stringDepth;
int id = 0;
public static int c;
public String toString() {
StringBuilder result = new StringBuilder();
String incomingLabel = this.isRoot() ? "" : this.incomingEdge.label;
for (int i = 1; i <= this.nodeDepth; i++)
result.append("\t");
if (this.isRoot()) {
c = 1;
this.id = 1;
} else {
this.id = c;
result.append(this.parent.id + " -> ");
result.append(this.id + "[label=\"" + incomingLabel + "\"];\n");
}
for (SuffixTreeNode child : children) {
c++;
child.id = c;
result.append(child.toString());
}
return result.toString();
}