簡體   English   中英

遞歸Java程序中的新對象創建

[英]New Object Creation in recursive Java program

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 newSB = new StringBuffer();

但是你要在下一行中附加傳入的StringBuffer的內容,所以看起來你每次都使用相同的StringBuffer,但你不是:

newSB.append(buf);

也許這不是你想要的? 嘗試使用調試器逐步完成此操作。

你能更好地解釋一下你想做什么嗎?

我發現這段代碼特別令人困惑。

        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 ,但實際上您每次都在創建一個新的。

如果你能更多地澄清問題,我想我們可以提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM