递归Java程序中的新对象创建

时间:2010-01-28 05:05:12

标签: java recursion object stringbuffer

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吗?

希望这是有道理的;让我知道我可以澄清的地方。谢谢! :)

2 个答案:

答案 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 ,但你每次都在创建一个新的。

如果你能更多地澄清问题,我想我们可以提供帮助。