【问题标题】:New Object Creation in recursive Java program递归Java程序中的新对象创建
【发布时间】:2011-01-10 06:42:09
【问题描述】:

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

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

【问题讨论】:

  • 是什么让您认为您使用的是相同的 StringBuffer?每一对递归,您都在创建一个新的,尽管您将旧数据附加到新数据。
  • 我很困惑。每次函数递归时,您似乎都在创建一个新的 StringBuffer 。 (在第 3 行)。也许如果你描述你想要完成的事情会更有意义。

标签: java recursion object stringbuffer


【解决方案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,但实际上每次都在创建一个新的。

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

【讨论】:

    【解决方案2】:

    您每次都在创建一个新的 StringBuffer:

    StringBuffer newSB = new StringBuffer();
    

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

    newSB.append(buf);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2019-09-03
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多