2015-04-19 5 views
1

Я пытаюсь построить строку рекурсивно, но это не совсем работаетПостроение строки рекурсивно в Java

мой код выглядит следующим образом

public void UpdatePrintList(ArrayList<Node> closedList, ArrayList<Node> openList) 
    { 
     if(count <= iterations) 
     { 
      String line1 = ""; 

      for(int i = 0; i < closedList.size(); i++) 
      { 
       if(i > 0) 
       { 
        line1 = line1 + "-"; 
       } 
       line1 = line1 + closedList.get(i).GetMovement(); 
      } 

      line1 = line1 + " " + closedList.get(closedList.size()-1).GetG() + " " + closedList.get(closedList.size()-1).GetHeuristic() + " " + closedList.get(closedList.size()-1).GetF(); 
      printList.add(line1);    
      //*****************************************************************     
String line2 = "OPEN "; 

     for(int i = 0; i < openList.size(); i++) 
     { 
      line2 = FindEarlierNode(openList.get(i), line2); 
     } 
     System.out.println(line2); 
    } 
    count++; 
} 

private String FindEarlierNode(Node varNode, String varString) 
{ 
    if(varNode.OpenedBy() == null) 
    { 
     varString += varNode.GetMovement() + "-"; 
    } 
    else 
    { 
     FindEarlierNode(varNode.OpenedBy(), varString); 
    } 
    varString = varString + varNode.GetMovement() + "-"; 
    return varString; 
} 

Странным является то, что я знаю, что это, если заявление

 if(varNode.OpenedBy() == null) 
    { 
     varString += varNode.GetMovement() + "-"; 
    } 

работает правильно, поэтому функция действительно достигает самого раннего узла. Но это не добавляет к строке. Код запускается, но ничего не возвращает. GetMovement возвращает только одну или две строки символов. Вывод должен выглядеть следующим образом:

ОТКРЫТЫЙ S-R S-RD S-D

Но вместо этого он выглядит следующим образом:

ОТКРЫТЫЙ D-DL-L-

Может кто-нибудь помочь?

+0

Верхняя часть вашего кода кажется отрезанной, поэтому я боюсь, что мы не сможем помочь, пока вы не исправите свой вопрос. –

+0

верхняя часть добавлен. – user2787386

+0

Не используйте верхний регистр в имени метода, вместо FindEarlierNode используйте findEarlierNode – jfcorugedo

ответ

0

Удаленный контроль. Это дает мне мой желаемый результат:

private String FindEarlierNode(Node varNode, String varString) 
{ 
    if(varNode.OpenedBy() != null) 
    { 
     varString = varString + varNode.GetMovement() + "-"; 
     return FindEarlierNode(varNode.OpenedBy(), varString); 

    } 

    return varString += varNode.GetMovement() + " "; 
} 

спасибо всем.

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