我有一个sed_pp的sed_pp,该类别名为"儿童",其中包含其他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(。
。我认为我需要将递归用于此问题,但我并不是很擅长。
您不需要递归来解决问题。您的代码只需要在此部分中进行修复
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;
}