我有一个SED_PP类,该类具有一个名为children的ArrayList,其中包含其他SED_PP。我正在尝试编写一种方法,该方法可以告诉用户一个SED_PP对象是否可以是另一个SED_PP对象的孩子。
我有一个迭代且非动态的方法isChild(SED_PP sed),它不会遍历子对象具有的对象中的所有数组列表。
public class SED_PP
{
private ArrayList<SED_PP> children = new ArrayList<SED_PP>();
public ArrayList<SED_PP> getChildren() { return children;}
//other methods
public boolean IsChild(SED_PP sed)
{
boolean answer = false;
if (this.children.contains(sed))
answer = false;
else{
for (SED_PP s : this.children){
if(!s.getChildren().isEmpty())
answer = true;
}
}
}
return answer;
}
}
所示的isChild方法不会遍历父SED_PP对象拥有的所有数组列表。例如,如果父A的孩子为B,B的孩子为C,C的孩子为D,则当前的isChild方法在应该为A.IsChild(D)时不会返回true。
我认为我需要对这个问题使用递归,但是我不是很擅长。
答案 0 :(得分:0)
您无需递归即可解决问题。您的代码只需要对此部分进行修复
for (SED_PP s : this.children) {
if(!s.getChildren().isEmpty()) {
answer = true;
}
}
您没有检查B是否有孩子C和C是否有孩子D,您仅询问B是否有孩子。您应该以这种方式更改IsChild
方法代码。
public boolean IsChild(SED_PP sed)
{
if (this.children.contains(sed)) {
return true;
}
for (SED_PP s : this.children) {
if (s.IsChild(sed)) {
return true;
}
}
return false;
}