1

次のような構造があります。

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 が 2 回表示され、結果に改行が追加されませんでした。

================================ 機能を変更しました:</p>

@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]]

なぜ子供は2回繰り返したのですか?「、」はどこから来たのですか?

4

3 に答える 3

5

\nの代わりに使用/n

treeStructure = treeStructure + "--- >" + children.toString() + "\n";
于 2012-05-08T12:43:05.693 に答える
2

しないでください。

改行はtoString()メソッドに属していません。誰かがこれらのオブジェクトのリストまたはマップを作成することを決定すると、それらはかなり混乱を引き起こします。 toString()はプリティプリントであってはなりません。その目的のために特定の方法を使用して、信頼できる出力を得ることができます。 toString()には、フォーマットされた出力を生成するためのそのようなコントラクトはありません。

于 2012-05-08T13:45:52.170 に答える
1

\r\n または BufferedWriter を使用してみてください: BufferedWriter.newLine()

、は配列のように見えるので書きます。同じ理由で、child1 が繰り返されます。
変化する:

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

に:

treeStructure+"-->"+child.toString()+"\n"
于 2012-05-08T12:43:41.113 に答える