2012-05-11 5 views
1
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) 
     { 

     } 
    } 
+0

Вы должны удалить блок Try/поймать, или, по крайней мере, распечатать трассировку стека, в противном случае вы не замечаете, когда возникает исключение. – michael667

+0

@ michael667 Исключительный ловушка - это проверка границ ленивого человека. Это плохая практика кодирования, но это не то, что вызывает переполнение. – trutheality

+0

Укажите значения, которые будут храниться 'map'. –

ответ

4

Скажем, карта целиком состоит из нулей, и вы находитесь в верхнем левом углу. Вы переместитесь на один шаг вправо, затем на один шаг влево, затем на один шаг вправо и так далее.

Вам нужно как-то пометить ячейки, которые вы уже посетили, чтобы предотвратить бесконечную рекурсию.

Кроме того, улавливание IndexOutOfBoundsException не такая хорошая идея:

  • во-первых, я не считаю это хороший стиль: если в дальнейшем вы должны были добавить некоторый код внутри try блока, который также может throw IndexOutOfBoundsException, ваш код начнет терпеть неудачу;
  • во-вторых, если первая проверка (map[x1-1][y1]) вне пределов, вы пропустите оставшиеся проверки;
+0

ok, tq so much .. – Hans

+0

Правильно ли, что я должен сделать boolean [] [] статус, чтобы отметить, что я поехал туда? и где я ставлю статус в свой код? thx для наблюдения за моим quetion :) – Hans

-1

вероятно, вы пытаетесь получить доступ к -1 индекс или длину + 1

думать, что произойдет в крае

+1

Это не вызывает ошибку переполнения стека. – trutheality

+0

О да, вы правы. в этом случае, вероятно, это бесконечная проблема рекурсии. –

Смежные вопросы