Java递归函数失败
我的职能是:Java递归函数失败,java,recursion,jgraph,Java,Recursion,Jgraph,我的职能是: private void addEdges(mxICell mainObject, List<Object> edgesList) { if (mainObject.getEdgeCount() > 0) { // for (int i = 0; i < mainObject.getEdgeCount(); i++) { edgesList.add(mainObject.getEdgeAt(0)
private void addEdges(mxICell mainObject, List<Object> edgesList) {
if (mainObject.getEdgeCount() > 0) {
// for (int i = 0; i < mainObject.getEdgeCount(); i++) {
edgesList.add(mainObject.getEdgeAt(0));
addEdges(((Line) mainObject.getEdgeAt(0)).getSource(), edgesList);
}
// }
else
return;
}
这是因为一旦
main对象的边缘计数大于零,函数就会反复调用自身,导致stackoverflow异常。您需要定义一个适当的终止条件
在您的数据结构中很可能有一个圆圈
例如:
mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1
或者类似的。事实是,递归调用永远不会终止 这是因为一旦main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件
在您的数据结构中很可能有一个圆圈
例如:
mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1
或者类似的。事实是,递归调用永远不会终止 这是因为一旦main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件
在您的数据结构中很可能有一个圆圈
例如:
mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1
或者类似的。事实是,递归调用永远不会终止 这是因为一旦main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件
在您的数据结构中很可能有一个圆圈
例如:
mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1
或者类似的。事实是,递归调用永远不会终止 如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失
另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作 如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失
另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作 如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失
另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作 如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失
另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作 edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。mainObject.getEdgeCount()
总是>0
。请使用一些终止条件。似乎mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。mainObject.getEdgeCount()
总是>0
。请使用一些终止条件。似乎mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。mainObject.getEdgeCount()
总是>0
。请使用一些终止条件。似乎mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。mainObject.getEdgeCount()
总是>0
。请使用一些终止条件。似乎mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填满堆栈,导致“StackOverflowerError”怎么可能?递归调用是在下一个对象上进行的,在本例中,该对象是((Line)mainObject.getEdgeAt(0)).getSource()。我们没有看到实现,因此唯一的逻辑结论是传递edgecount大于零的mxICell
对象。也许这里面有一个圆圈