Java新手在这里寻求一些帮助。以下是有问题的代码:
public void generateCodeTable(Node tree, StringBuffer buf) {
if (tree != null) {
StringBuffer newSB = new StringBuffer();
newSB.append(buf);
if (tree.key != '$') {
System.out.print(tree.key + "(" + buf + ") " );
} else {
System.out.print(tree.key + "(" + buf + ") " );
}
generateCodeTable(tree.getLeftNode(), newSB.append(1));
generateCodeTable(tree.getRightNode(), newSB.append(0));
}
这样做是在递归循环的每次迭代中不断附加到SAME StringBuffer,当我真正希望能够做到这一点时,它每次都会创建一个全新的StringBuffer。有什么方法可以强制创建一个新的StringBuffer吗?
希望这是有道理的;让我知道我可以澄清的地方。谢谢! :)
答案 0 :(得分:3)
每次创建一个新的StringBuffer:
StringBuffer newSB = new StringBuffer();
但是你要在下一行中附加传入的StringBuffer的内容,所以看起来你每次都使用相同的StringBuffer,但你不是:
newSB.append(buf);
也许这不是你想要的?尝试使用调试器逐步完成此操作。
答案 1 :(得分:1)
你能更好地解释一下你想要做什么吗?
我发现此代码部分特别令人困惑。
if (tree.key != '$') {
System.out.print(tree.key + "(" + buf + ") " );
} else {
System.out.print(tree.key + "(" + buf + ") " );
}
无论IF / ELSE采用哪条路径,你都要打印相同的东西,为什么要有条件部分呢?
此外,当您执行以下操作时:
StringBuffer newSB = new StringBuffer();
newSB.append(buf);
您确实在创建一个新的 StringBuffer 对象,本地作用于此函数。但是,您要将参数 buf 的内容附加到新的 StringBuffer 。这可能会让人觉得你在函数的每次迭代中都附加了相同的 StringBuffer ,但你每次都在创建一个新的。
如果你能更多地澄清问题,我想我们可以提供帮助。