Ошибка Stackoverflow в ArrayList.retainAll()?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка Stackoverflow в ArrayList.retainAll()?

Сообщение Anonymous »

Я пытаюсь решить AOC 2023, день 1, p1, на Java. Я реализовал рекурсивный метод для прохождения цикла и получения результата.
Я могу запускать тестовые примеры и получать правильные ответы.
При запуске кода в большом файле (один из которых предоставлен AOC) я получаю следующее исключение:

Код: Выделить всё

Exception in thread "main" java.lang.StackOverflowError
at java.base/java.util.ArrayList.indexOf(ArrayList.java:286)
at java.base/java.util.ArrayList.contains(ArrayList.java:275)
at java.base/java.util.ArrayList.batchRemove(ArrayList.java:823)
at java.base/java.util.ArrayList.retainAll(ArrayList.java:811)
at src.day10.One.traverseTiles2(One.java:129)
at src.day10.One.traverseTiles2(One.java:136)
at src.day10.One.traverseTiles2(One.java:136)
[...]
Затем трассировка стека продолжается с оператора src.day10.One.traverseTiles2(One.java:136) 1018 раз.
Код в строке 129 такой:

Код: Выделить всё

List directionByTile = new ArrayList(tileToDirectionMap.getOrDefault(currentTile, new ArrayList()));
directions.retainAll(directionByTile); // -> line 129

Код: Выделить всё

tileToDirectionMap
является обычной статической картой Map для сопоставления значения и направления плитки.
Из stackTrace кажется, что возникает ошибка list.retailAll()?
Раньше у меня был неизменяемый список, я поменял его на изменяемый список, проверил документацию по RetailAll.
Думаю, с тех пор список является локальной переменной, доступ к нему вне метода невозможен, у меня не должно возникнуть никаких проблем. Не знаете, почему метод continueAll() выдает исключение?
Поскольку я считаю, что мне сложно объяснить логику, я делюсь своим кодом.
Мой код : https://github.com/djay-S/advent-of-cod ... 90fb53bd0a

Подробнее здесь: https://stackoverflow.com/questions/783 ... -retainall
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»