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, который каким-то образом достигнет уровня, на котором больше нет ребер для обработки, чтобы ваше условие завершения работало правильно.