尝试编写一个布尔函数,如果'm'是当前类的祖先,则返回true。如果是妈妈或爸爸,或是妈妈或爸爸的祖先,那么'm'是祖先。
这会让我到那儿吗?
public boolean isAncestor(member m){
if (mom == m || dad == m){
return true;
}
else{
if(isAncestor(m.mom) || isAncestor(m.dad)){
return true;
}
}
return false;
}
谢谢!
答案 0 :(得分:2)
是的,或多或少。如果你到了一个不知道妈妈或爸爸的祖先层,并且是空的怎么办?
public boolean isAncestor(member m){
if (m == null)
return false;
if (mom.equals(m) || dad.equals(m))
return true;
else if(isAncestor(m.mom) || isAncestor(m.dad))
return true;
return false;
}
答案 1 :(得分:0)
逻辑会让你到达那里,但是必须注意等号。
在Java ==
中比较实例的相等性。可能性很大,随着时间的推移,你会有两个相对平等但在不同情况下存在的实例。如果您的代码是为防止此类事件发生而编写的,则您无需将==
更改为.equals(...)
;但是,如果您没有放入任何保护措施以确保只存在每个“相同”对象的一个实例,那么您可能希望将比较更改为.equals(...)
并实现自定义“公共布尔值等于(对象其他) {...}`基础“人”类的方法。
答案 2 :(得分:0)
如果您要使用递归,则需要停止条件。每个人都有妈妈或爸爸吗?考虑一下:
public boolean isAncestor(Member m) {
// stop condition
if(this.mom == null && this.dad == null) return false;
// stop condition
if(this.mom == m || this.dad == m) return true;
// loop condition
return mom.isAncestor(m) || dad.isAncestor(m);
}
答案 3 :(得分:0)
可能但不是100%正确。你还应该检查妈妈和爸爸是否存在,否则你可能会得到NullPointerException。
此外,其他人使用==
时是正确的,非常可疑。
答案 4 :(得分:0)
如果没有关系,递归何时停止?
答案 5 :(得分:0)
实际上,您需要一种方法来了解您要比较哪两个成员的关系。你可能想要做这样的事情(未经测试):
/**
* @param m1 the member we want to get ancestry from
* @param m2 the member we presume is an ancestor
*/
public boolean isAncestor(member m1, member m2){
if (m1 == NULL || m2 == NULL) {
return false;
}
if (m1.isMom(m2) || m1.isDad(m2)){
return true;
}
else if(isAncestor(m1.mom, m2) || isAncestor(m1.dad, m2)) {
return true;
}
return false;
}
您需要撰写isMom
和isDad
来比较m2
与m1
的关系。