我有这段代码可以计算子节点的数量并将其添加到集合中。但是,返回该方法时set中的值会丢失,最终结果中set中的一个值会丢失。如何更改代码以保留所有值?我无法更改方法的标题。谢谢!
public Set<Integer> countChildren() {
Set<Integer> set = new HashSet<Integer>();
for (Person child: children) {
child.countChildren();
set.add(child.children.size());
}
return set;
}
答案 0 :(得分:0)
您可以将set
变量作为参数传递给递归函数。
public Set<Integer> countChildren(Set<Integer> set) {
for (Person child: children) {
child.countChildren(set);
set.add(children.child.size());
}
return set;
}
答案 1 :(得分:0)
进行--set全局变量,然后仅以递归方式访问它。 为了获得一些自由,请编写onother函数并在给定的函数中调用它:
Set<Integer> set = new HashSet<Integer>();
public Set<Integer> myCountChildren(Set<Integer> set) {
for (Person child: children) {
set.add(child.children.size());
child.myCountChildren(set);
}
return set;
}
public Set<Integer> countChildren() {
return myCountChildren(set)
}
答案 2 :(得分:0)
您不能更改方法签名,但是看起来'children'是类成员,因此可以从其他方法访问它。为什么不创建另一个方法,将包含来自其他调用的值的集合传递给该方法?实际上,这是一种称为“累加器”的模式,您可以在其中累积正在进行的调用的结果。
第二件事,选择一个保留这些值的集合看起来不是一个好主意。如果两个节点的子节点数相同怎么办?...