如何将新行添加到多树

问题描述:

的的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

使用\n而不是/n

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

谢谢,但输出有“,” –

+2

这是因为您没有覆盖列表的'toString()'实现。 – Zeemee

尝试使用\ r \ n或使用的BufferedWriter:BufferedWriter.newLine()

的,写的,因为它被认为是像一个数组。 同样的原因是重复child1。
变化:

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

到:

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

不要这样做。

换行符不属于toString()方法。当有人决定创建这些对象的列表或地图时,它们会造成相当大的混乱。 toString()不应该是一个漂亮的打印。为此目的使用特定的方法,以便它具有可靠的输出。 toString()没有这样的合约来产生格式化输出。