0

我有这样的课:

class Foo {
    public String name = "";
    public ArrayList<Foo> children = new ArrayList<Foo>();
}

现在,我在 ArrayList 中存储了大约两千个这样的“Foo”对象,从上面的代码片段可以看出,它们彼此相关。现在,这些关系可能是循环的:A 可能有一个孩子 B,可能有孩子 C,可能有孩子 A。我想要做的是打印出这些关系的树,同时忽略循环关系,如下所示:

ObjA
  ObjB
    ObjC
ObjD
  ObjB
    ObjA

我怎样才能做到这一点?它不必很快或任何东西,这棵树主要是为了确保我的程序的结果。

4

1 回答 1

1

Foo需要一个print打印其内容的方法,然后调用它指向 的print方法。接受一个包含所有已遍历对象的HashSet 。如果是,那么它是循环的一部分,你不调用它的方法。FooPrintFoonextvisitedprint

class Foo {
    Foo next;
    void print(HashSet<Foo> visited) {
        System.out.println("this Foo's ID or whatever it is you're printing");
        visited.add(this);
        if(next != null && !visited.contains(next)) {
            next.print(visited);
        }
    }
}

您可能还想传入一个int确定缩进级别的参数 - 如果indent等于 4,则在 之前打印 4 个空格,并在调用时System.out.println增加indent2 或 4 或其他任何值。printnext

于 2013-04-12T14:14:51.417 回答