在以下代码中,变量levelsToGo
在getAllStringNames()
的递归调用时意外更新。当它返回到堆栈弹出时,我获得了传递给递归调用的levelsToGo的值,而不是先前存在的值。
public List<String> getAllStringNames(Student p, Integer levelsToGo)
{
List<String> employeeSet = new ArrayList<String>();
for(Student child : p.getAllSubjects())
{
employeeSet.add(child.getRoll());
if(levelsToGo > 0)
studentChilds.addAll(getAllStringNames(child, --levelsToGo))
}
return employeeSet;
}
我第一次通过student1时,levelsToGo
为1,而student1有1个孩子。它以递归方式调用并将levelsToGo
设置为0.当它返回到第一次迭代时,我们发现值仍为0.它应该是原始值1.
答案 0 :(得分:3)
在levelsToGo
方法调用中使用它时,会递减getAllStringNames()
。表达式--levelsToGo
表示从levelsToGo
的值中减去一个,将其存储回levelsToGo
,然后在方法调用中使用它。
相反,你应该写
studentChilds.addAll(getAllStringNames(child, levelsToGo - 1));
答案 1 :(得分:1)
不要递减整数变量,将新整数作为参数传递
studentChilds.addAll(getAllStringNames(child, levelsToGo - 1))