我正在研究一种方法,该方法应该返回包含所有后代的数组列表。它几乎可以工作,但第一个(“最高”)人总是包括在内,但我不需要他。有人可以改进我的代码吗?谢谢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; } }
2 回答
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
您的代码似乎过于复杂。你是这个意思吗?
public ArrayList<Person> getDescendants() {
ArrayList<Person> descendants = new ArrayList<Person>();
for (Person child : this.getChildren()) {
descendants.add(child);
descendants.addAll(child.getDescendants());
}
return descendants;
}
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
descendants.add(this);
您正在明确地将父级添加到您的后代列表中。不要那样做。
另请注意,该if
声明不是必需的。当子列表的长度为零时,循环根本不会迭代。
添加回答
举报
0/150
提交
取消