我正在研究一个方法,该方法应该返回带有所有后代的Arraylist。它几乎可以正常工作,但始终包括第一个(“最高”)人,但我不需要他。谁能帮我改善我的守则?谢谢
getChildren-仅返回一个人的孩子
public ArrayList<Person> getDescendants() {
ArrayList<Person> descendants = new ArrayList<Person>();
ArrayList<Person> next = this.getChildren();
if (next.size() != 0) {
for (int i = 0; i < next.size(); i++) {
ArrayList<Person> b = next.get(i).getDescendants();
descendants.addAll(b);
if (!descendants.contains(this)) {
descendants.add(this);
}
}
return descendants;
} else {
descendants.add(this);
return descendants;
}
}
答案 0 :(得分:2)
您的代码似乎过于复杂。你是这个意思吗?
public ArrayList<Person> getDescendants() {
ArrayList<Person> descendants = new ArrayList<Person>();
for (Person child : this.getChildren()) {
descendants.add(child);
descendants.addAll(child.getDescendants());
}
return descendants;
}
答案 1 :(得分:2)
descendants.add(this);
您正在将父级显式添加到后代列表中。不要那样做。
还要注意,if
语句不是必需的。当子列表的长度为零时,循环将根本不会迭代。