private void findRute(int x1, int y1, int x2, int y2, int counter)
{
try
{
if((x1 == x2) && (y1 == y2))
{
if(this.min > counter)
{
this.min = counter;
}
}
else
{
if(map[x1-1][y1] == 0)
{
this.findRute(x1 - 1, y1, x2, y2, counter + 1);
}
if(map[x1+1][y1] == 0)
{
this.findRute(x1 + 1, y1, x2, y2, counter + 1);
}
if(map[x1][y1 + 1] == 0)
{
this.findRute(x1, y1 + 1, x2, y2, counter + 1);
}
if(map[x1][y1 - 1] == 0)
{
this.findRute(x1, y1 - 1, x2, y2, counter + 1);
}
}
}
catch(IndexOutOfBoundsException z)
{
}
}
ответ
Скажем, карта целиком состоит из нулей, и вы находитесь в верхнем левом углу. Вы переместитесь на один шаг вправо, затем на один шаг влево, затем на один шаг вправо и так далее.
Вам нужно как-то пометить ячейки, которые вы уже посетили, чтобы предотвратить бесконечную рекурсию.
Кроме того, улавливание IndexOutOfBoundsException
не такая хорошая идея:
- во-первых, я не считаю это хороший стиль: если в дальнейшем вы должны были добавить некоторый код внутри
try
блока, который также может throwIndexOutOfBoundsException
, ваш код начнет терпеть неудачу; - во-вторых, если первая проверка (
map[x1-1][y1]
) вне пределов, вы пропустите оставшиеся проверки;
вероятно, вы пытаетесь получить доступ к -1 индекс или длину + 1
думать, что произойдет в крае
Это не вызывает ошибку переполнения стека. – trutheality
О да, вы правы. в этом случае, вероятно, это бесконечная проблема рекурсии. –
- 1. Почему этот код вызывает java.lang.StackOverflowError
- 2. почему этот код броска java.lang.StackOverflowError
- 3. хэш-код() вызывает java.lang.StackOverflowError
- 4. java.lang.StackOverflowError?
- 5. Eclipse SWT java.lang.StackOverflowError: почему мой слушатель выполняет много раз?
- 6. Почему мой код разбился?
- 7. Почему мой код разбился?
- 8. Почему мой код ошибается?
- 9. Почему мой код ошибки?
- 10. Почему мой код игнорируется?
- 11. Почему мой код недоступен?
- 12. Почему мой код останавливается?
- 13. Почему мой код протекает?
- 14. Почему мой код аварии
- 15. Почему мой код продолжается?
- 16. Почему мой код висит?
- 17. Почему мой код сломан?
- 18. scala.MatchError: java.lang.StackOverflowError (из класса java.lang.StackOverflowError)
- 19. java.lang.StackOverflowError
- 20. Почему мой код заставляет мой симулятор сбой?
- 21. Почему мой контроллер нарушает мой код?
- 22. Почему мой код .htaccess замедляет мой сайт?
- 23. Почему мой xaml не увидит мой код?
- 24. Почему мой код python забивает мой сервер?
- 25. почему мой код показать грязный код
- 26. Почему мой код Java переопределяет мой код sql?
- 27. Почему IsPostBack пропускает мой код?
- 28. Почему мой код игнорирует время?
- 29. Почему мой код вызывает исключение?
- 30. Почему мой код не прослушивает?
Вы должны удалить блок Try/поймать, или, по крайней мере, распечатать трассировку стека, в противном случае вы не замечаете, когда возникает исключение. – michael667
@ michael667 Исключительный ловушка - это проверка границ ленивого человека. Это плохая практика кодирования, но это не то, что вызывает переполнение. – trutheality
Укажите значения, которые будут храниться 'map'. –