1

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

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

4

2 回答 2

3

您每次都通过以下方式创建一个新的 StringBuffer:

StringBuffer newSB = new StringBuffer();

但是你在下一行附加了传入的 StringBuffer 的内容,所以看起来你每次都使用相同的 StringBuffer,但你不是:

newSB.append(buf);

也许那不是你想要的?尝试使用调试器逐步完成。

于 2010-01-28T05:34:52.730 回答
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,但实际上您每次都在创建一个新的。

如果您能进一步澄清问题,我认为我们可以提供帮助。

于 2010-02-10T17:15:15.347 回答