0

QuadTree を印刷する必要があります。問題は、ツリー構造を視覚化できるようにするために増分シフトを実装する方法がわからないことです。現在、各レベルのノードが新しい行に表示されています。ただし、ツリーを操作するためにこの視覚化を使用するのは複雑です。

         @Override public String toString() {
            StringBuilder result = new StringBuilder();
            String NEW_LINE = System.getProperty("line.separator");
            String SHIFT = System.getProperty("  ");

            if (_children != null) {
                String content = "";
                for (QtreeNode<E> node : _children) {
                    content += node.toString() + ",";
                }
                result.append("{" + SHIFT + NEW_LINE + 
                            content.substring(0, content.length()) + 
                            SHIFT + NEW_LINE + "}");
            } else if (_items != null) {
                String content = "";
                for (E item : _items) {
                    content += item.toString() + " ";
                }
                result.append("[" + content + "]");
            }
            return result.toString();
         }
4

1 に答える 1

1

ツリー ノードに別の toStringWithIndent(int depth) メソッドを提供し、オーバーライドされた toString() 内で呼び出します。このメソッドは、各サブノードなどに対して同じものを再帰的に呼び出します。

UPDいくつかの例

class Node {
    private String name;
    private List<Node> children;

    @Override
    public String toString() {
        String s = name;
        for(Node n: children) s += children.toStringWithIndent(1);
        return s;
    }

    private String toStringWithIndent(int depth) {
        // same as toString() but with indent
        String s = indentFor(depth) + name;
        for(Node n: children) s += indentFor(depth) +
                children.toStringWithDepth(depth + 1);
        return s;
    }

    private static String indentFor(int depth) {
        StringBuilder b = new StringBuilder(depth);

        while(depth-- > 0) {
            b.append(" ");
        }

        return b.toString();
    }


}
于 2013-10-24T15:22:54.500 に答える