[英]Java Recursive function fails
我的職能是:
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;
}
BEGING UPDATE函數調用在這里:
for (Object obj : map.values()) {
if (obj instanceof Port
&& ((Port) obj).getParent().getStyle().equals("POWER")) {
String Feeder = ((Port) obj).getParent().getValue()
.toString();
List<Object> edgesList = new ArrayList<Object>();
Port p = (Port) obj;
mxICell mainObject = p;
addEdges(mainObject, edgesList);
//staff
}}
結束更新,它給了我一個
Exception occurred during event dispatching:
java.lang.StackOverflowError
這是因為一旦mainObject
的邊緣計數大於零,該函數就會反復調用自身,從而導致stackoverflow異常。 您需要定義適當的終止條件。
您的數據結構中很可能有一個圓圈。
例如:
mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1
或類似的東西。 事實是,您的遞歸調用永遠不會終止。
如您所顯示的,在注釋的for循環中,您將以相同的方式循環遍歷mainobject中的所有getedge,因此在遞歸調用的情況下,也必須減少主對象的邊緣。 您必須減少流中已處理的邊緣,以便在到達下一級時消失了一條邊緣。
而且,您還必須確保對Line對象進行getsource,它將以某種方式達到沒有更多邊緣可處理的水平,以便您的終止條件能夠正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.