private String name; private int age; private char sex; private Person spouse; private Person mother; private Person father; private List<Person> children;
public List<Person> getSisters() { List<Person> result = new ArrayList<Person>(); List<Person> a = father.getChildren();//这边不考虑同父异母或同母异父 for (Person c : a) { if ("女".equals(c.sex) && (!this.name.equals(c.name))) { result.add(c); } } return result; }
public List<Person> getAncestors() { List<Person> result = new ArrayList<Person>(); getTheFather(result, this); return result; }
private void getTheFather(List<Person> list, Person son) { Person f = son.father; while(f != null) { getTheFather(list, f); } }
private String name;
private int age;
private char sex;
private Person spouse;
private Person mother;
private Person father;
private List<Person> children;
public List<Person> getSisters() {
List<Person> result = new ArrayList<Person>();
List<Person> a = father.getChildren();//这边不考虑同父异母或同母异父
for (Person c : a) {
if ("女".equals(c.sex) && (!this.name.equals(c.name))) {
result.add(c);
}
}
return result;
}
public List<Person> getAncestors() {
List<Person> result = new ArrayList<Person>();
getTheFather(result, this);
return result;
}
private void getTheFather(List<Person> list, Person son) {
Person f = son.father;
while(f != null) {
getTheFather(list, f);
}
}
多谢ls的,找sister的方法我也同意。但是找祖先是递归吗?每一个人都有父有母,把家谱反着看好像也是binary tree吧,如果要祖先定义为父的父,父的母,母的父,母的母,是不是应该用tree traversal(遍历树)呢?
list of all older sisters
Person f = son.father;看不懂,新人求问
这个类的设计用到了组合模式,查找则可以通过在组合对象上提供标准的迭代器接口,使得不暴露集合内部的实现,就能够顺序访问集合中的各个元素。
这一部分可以看看《head first design patterns》组合与迭代器那一篇,里面的例子情境和这道题挺像。
《head first design patterns》下载:
http://download.csdn.net/download/shuchunsuper/4361346