[英]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.