2012-05-08 111 views
1

的的toString有這樣的結構:如何將新行添加到多樹

public class TreeNode { 

private String key; 
private List<TreeNode> children; 
    .... 

}

我重寫ToString()函數

@Override 
public String toString() { 
    String treeStructure = "TreeNode [key=" + key + "]"; 
    if(children!=null){ 
     for(TreeNode child:children){ 
     treeStructure = treeStructure+"--- >"+children.toString()+"/n"; 
     } 
    } 
    return treeStructure; 
} 

然後我測試結果:

public static void main(String[] args) { 
    TreeNode node = new TreeNode(); 
    node.setKey("root"); 
    List<TreeNode> children = new ArrayList<TreeNode>(); 
    TreeNode child1 = new TreeNode(); 
    child1.setKey("child1"); 
    TreeNode child2 = new TreeNode(); 
    child2.setKey("child2"); 
    children.add(child1); 
    children.add(child2); 
    List<TreeNode> grandchildren = new ArrayList<TreeNode>(); 
    TreeNode grandchild = new TreeNode(); 
    grandchild.setKey("grandchild"); 
    grandchildren.add(grandchild); 

    node.setChildren(children); 
    child1.setChildren(grandchildren); 

    System.out.println(node); 

} 

但是,當我運行它的輸出是:

TreeNode [key=root]--->[TreeNode [key=child1]--->[TreeNode [key=grandchild]]/n, TreeNode [key=child2]]/n--->[TreeNode [key=child1]--->[TreeNode [key=grandchild]]/n, TreeNode [key=child2]]/n 

我怎樣才能在輸出中添加換行是這樣的:

TreeNode [key=root]--->TreeNode [key=child1]--->TreeNode [key=grandchild] 
        --->TreeNode [key=child2] 

但現在的child1顯示出兩次,不加入新行結果。

================================ 我改變了功能:

@Override 
public String toString() { 
    String treeStructure = "TreeNode [key=" + key + "]"; 
    if(children!=null){ 
     for(TreeNode child:children){ 
     treeStructure = treeStructure+"\n"+"-->"+children.toString()+"\n"; 
     } 
    } 
    return treeStructure; 
} 

然後輸出結果如下:

TreeNode [key=root] 
--->[TreeNode [key=child1] 
--->[TreeNode [key=grandchild]] 
, TreeNode [key=child2]] 

--->[TreeNode [key=child1] 
--->[TreeNode [key=grandchild]] 
, TreeNode [key=child2]] 

爲什麼孩子重複兩次,「?」從哪裏來?

+0

在Java中,換行符是「\ n」,而不是「/ n」。 –

+0

看到[我的答案#打印](http://stackoverflow.com/questions/10497119/how-to-save-the-path-of-search-result-in-java-multi-tree/10499759#10499759) – BLUEPIXY

回答

5

使用\n而不是/n

treeStructure = treeStructure + "--- >" + children.toString() + "\n"; 
+0

謝謝,但輸出有「,」 –

+2

這是因爲您沒有覆蓋列表的'toString()'實現。 – Zeemee

0

嘗試使用\ r \ n或使用的BufferedWriter:BufferedWriter.newLine()

的,寫的,因爲它被認爲是像一個數組。 同樣的原因是重複child1。
變化:

treeStructure+"\n"+"-->"+children.toString()+"\n" 

到:

treeStructure+"-->"+child.toString()+"\n" 
2

不要這樣做。

換行符不屬於toString()方法。當有人決定創建這些對象的列表或地圖時,它們會造成相當大的混亂。 toString()不應該是一個漂亮的打印。爲此目的使用特定的方法,以便它具有可靠的輸出。 toString()沒有這樣的合約來產生格式化輸出。