2013-10-08 7 views
1

Я пытаюсь написать рекурсивный код, чтобы найти все пути выхода квадратной сетки, и я получаю некоторую ошибку в Project4.escape (Project4.java:41) Я понятия не имею, какая ошибка это правда, потому что в следующей строке:Неизвестная ошибка Java Recursion

в Project4.escape (Project4.java:41)

повторяется так часто, что сообщение об ошибке не отображается. Пожалуйста, помогите мне найти проблему и исправьте ее. Ниже следует мой метод побега.

private static void escape(int row, int col, int[][] swamp,String escapePath) 
    { 
     if (row == swamp.length || row==0 || col == 0 || col == swamp.length) 
     { 
      //winner 
      System.out.println(escapePath); 

     } 
     else 
     { 
      for (int i = -1; i < 2; i++) 
      { 
       for (int j=-1;j<2;j++) 
       { 
        if (row+i>=0 && j+col>=0 && row+i<swamp.length && col+j<swamp.length && 
        swamp[row + i][col + j] == 1) 
        { 
         escapePath+="["+row+","+col+"]"; 
         swamp[row][col]=2; 
         escape(row,col,swamp,escapePath); 
        } 
       } 
      } 
     } 
     swamp[row][col]=1; 
    } 

// РЕДАКТИРОВАТЬ: Ниже следует основной метод, который показывает, с чего я сначала называю побег.

public static void main(String[] args) throws Exception 
    { 
     int[] dropInPt = new int[2]; // row and col will be on the 2nd line of input file; 
     int[][] swamp = loadSwamp(args[0], dropInPt); //returns an 8 by 8 grid of 0s and 1s and fills dropInPt with 1s 
     int row=dropInPt[0], col = dropInPt[1]; 
     printSwamp(   "\n SWAMP: dropped in at: ["+row+","+col+"]\n",swamp); 
     System.out.println("\n ESCAPE PATHS:\n"); 


     String escapePath = "["+dropInPt[0]+","+dropInPt[1]+"]"; 
     escape(row,col,swamp,escapePath); 


    } 
+0

Какая линия 41? И каково общее сообщение об ошибке? Вы не получаете сообщение об ошибке «some». – nhgrif

+0

escape (строка, col, болото, escapePath); – user2856817

+0

Хорошо, я вижу, что рекурсия мешает вам видеть сообщение об ошибке. Вы пытались установить точку останова? Я установил точку останова и добавлю выходную строку. – nhgrif

ответ

1

Это ошибка stackoverflow. Поскольку вы вызываете escape(row,col,swamp,escapePath); несколько раз, не меняя состояние первой ячейки в циклах for.

Моя догадка для исправления, чтобы изменить row и col в

swamp[row][col]=2; 
escape(row,col,swamp,escapePath); 

к row+i и col+j.

+0

Спасибо, все. Он выполняется сейчас, и есть другие ошибки (за пределами), но эта проблема исправлена. – user2856817

+0

Не забудьте отметить этот ответ как принятый (большой галочкой слева от вас), если он ответит на ваш вопрос. – Joel

-1

Возможно, проблема возникает, потому что у вас есть «col» в кавычках. Попробуйте заменить это:

escapePath+="["+row+","+"col"+"]"; 

с этим:

escapePath+="["+row+","+col+"]"; 
+0

Спасибо, что указали это, но это не проблема. – user2856817

0

Она смотрит на меня, как и ряд цв никогда не переподчиняемая - каждый раз, когда функция рецидивирует, он работает на тот же вход. Рекурсия никогда не закончится, что приведет к ошибке переполнения стека.

0

Вероятный stackoverflowerror, вызванный выполнением одной и той же рекурсии снова и снова. На внутренних вложенных циклах вам не нужно вычислять, когда i==0 and j==0 вычисляет ту же точку снова и снова.