gpt4 book ai didi

java - 如何将带有嵌套 for 循环的迭代非动态方法转换为 Java 中的递归动态方法

转载 作者:行者123 更新时间:2023-12-02 03:51:15 24 4
gpt4 key购买 nike

我有一个类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,而本应返回 true。

我认为我需要使用递归来解决这个问题,但我不太擅长。

最佳答案

您不需要递归来解决您的问题。您的代码只需要修复这部分

for (SED_PP s : this.children) {

if(!s.getChildren().isEmpty()) {
answer = true;
}
}

你没有检查B是否有 child C,C是否有 child D,你只问B是否有 child 。您应该这样更改 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;
}

关于java - 如何将带有嵌套 for 循环的迭代非动态方法转换为 Java 中的递归动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com