Java Рекурсивная функция не работает

Моя функция:

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;
    }

НАЧАЛО ОБНОВЛЕНИЯ Вызов функции здесь:

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.StackruError

2 ответа

Это потому, что когда-то счетчик ваших mainObject больше нуля, функция вызывает себя снова и снова, что приводит к исключению переполнения стека. Вам необходимо определить правильное условие завершения.

Скорее всего, в вашей структуре данных есть круг.

Например:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1

Или что-то типа того. Факт, ваш рекурсивный вызов никогда не завершается.

Как вы показали, что в закомментированном цикле, что вы перебираете весь getege в главном объекте одинаково, вы также должны уменьшить края основного объекта в случае рекурсивного вызова. Вы должны уменьшить край, который уже обработан в потоке, чтобы при достижении следующего уровня один край исчез.

Кроме того, вы должны убедиться, что тогда вы получаете исходный код для объекта Line, который каким-то образом достигнет уровня, на котором больше нет ребер для обработки, чтобы ваше условие завершения работало правильно.

Другие вопросы по тегам