如何将嵌套的循环的迭代非动力学方法转换为Java中的递归动态方法



我有一个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;
}  

相关内容

  • 没有找到相关文章

最新更新