2017-07-01 3 views
0

皆さん、ありがとうございます。 コンソールで印刷するこの再帰的な方法があります。文字列を返すように、コンソールに出力する再帰的メソッドを変換する方法は?

private void printPath(Vertex destiny) { 
     if (destiny.getPrevious() != null) { 
      printPath(destiny.getPrevious()); 
      System.out.print(" to "); 
     } 
     System.out.print(destiny.getName()); 
    } 

しかし、今では印刷の代わりに連結文字列を返す必要があります。私はこの貧しい試みを持っている ...

private String printPath(Vertex destiny, String concat) { 
     if (destiny.getPrevious() == null) { 
      return " , " + concat; 
     } else { 
      return printPath(destiny, (destiny.getName() + " " + concat)); 
     } 
    } 

しかし、私はそれは私にStackOverflowExceptionがを与え、それを動作させることはできません。

編集:コンソールへ 出力は、たとえば次のとおりです。 ... 「スペインドイツにギリシャへのポーランドへの」そして、それは私が文字列で返したいと同じことです。この方法に

private String printPath(Vertex destiny, String concat) { 
    if (destiny.getPrevious() == null) { 
     return " , " + concat; 
    } else { 
     return printPath(destiny.getPrevious(), (destiny.getName() + " " + concat)); 
    } 
} 

destiny.getPrevious()代わりのdestiny:あなたのメソッドが正しく終了取得されていません

+0

あなたが同様にあなたのコンソールの出力を提供する場合に理解しやすいだろう(何をあなたは何を期待しているのか)。 – lkdhruw

+0

最初のコード例では、 'getPrevious()'に対して 'printPath'を呼び出します。あなたは2番目のケースでそれをやっていません。 – ajb

+0

2番目のコードで、 'printPath'が最初に呼び出されたときの2番目の引数' concat'の値は何ですか? – lkdhruw

答えて

1

、これを試してみてください。

+0

私はSriramが正しいと信じています。あなたがprintPathに渡したものを見て、最初の頂点に前の頂点がある場合、元の答えは無限ループにつながります –

+0

ありがとうございました! @SriramKailasam 実際には、2回目の返り時にgetPrevious()をインクルードすることを忘れてしまったため、無限ループが発生しました。 – r2montero

0

これはどう:

private StringBuilder printPath(Vertex destiny, StringBuilder path) { 
     if (destiny.getPrevious() != null) { 
      printPath(destiny.getPrevious(), path); 
      path.append(" to ") ; 
     } 
     path.append(destiny.getName()); 
     return path; 
    } 
0

"ドイツのポーランドギリシャスペイン"

ケース1のように、あなたが出力を期待している場合:destiny.getPrevious場合は、()== nullで、それが返されますdestiny.getName()は、最初のコードの場合と同じです。

ケース2:!destiny.getPreviousは、()= NULL、それは最後の要素への最初の要素を返すかどう

private String printPath(Vertex destiny, String concat) { 
    if (destiny.getPrevious() == null) { 
     return destiny.getName() + concat; 
    } else { 
     return printPath(destiny.getPrevious(), (" to " + destiny.getName() + concat)); 
    } 
} 
関連する問題