簡體   English   中英

Java遞歸函數失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM