2016-07-06 36 views
1

誰でも再帰ロジックを手伝ってもらえますか?私はwhileループを使用してiterating iteratorオブジェクトを持っています。次に、反復された各オブジェクトで、繰り返し繰り返す必要があります。反復子が反復子を反復することからの反復論理

private void handleRecursiveMethod(someMethod) { 
        Iterator<Sometype> methods=doingSomething(someMethod)); 
        while(methods.hasNext()){ 
         printingDetailsAboutThisMethod(methods.next()) 
         // Again with each method I have to do same 
         // operation until methods.hasNext becomes false. 
         handleRecursiveMethod(methods.next()); 
         // By calling this, it does not complete while 
         // loop first time. 
        } 
} 
+0

何かできるようにするには、パラメータsomeMethodの型が必要です。 –

+0

いくつかのタイプがあると仮定します。私は再帰ロジックについて質問したかった。 – marion

+0

これは再帰的ロジックではありません。これは反復的な論理です。私はあなたが求めていることで混乱しています。 –

答えて

1

イテレータに繰り返し処理するエントリがなくなるまで、関数はwhileループに入ります。だから私はhandleRecursiveMethod(methods.next());メソッドの最後に呼び出すと、それはNoSuchElementExceptionを投げているはずだと思います。

あなたの例からは、深さを最初に探索しようとしているようです。したがって、コードは次のようになります

private void handleRecursiveMethod(Sometype someMethod) { 
    Iterator<Sometype> methods=doingSomething(someMethod)); 
    while(methods.hasNext()){ 
      Sometype method = methods.next() 
      printingDetailsAboutThisMethod(method) 
      handleRecursiveMethod(method); 
    } 
} 
+0

あなたの答えは多少役立ちますが、コードは正しく修正されていますが、奇数の値が反復される場合にだけ 'NoSuchElementException'をスローします。もちろん、奇妙な要素だけが 'printingDetailsAboutThisMethod'に与えられ、' handleRecursiveMethod'の再帰呼び出しでは偶数要素だけが使用されるので、コードの修正は正しいですが、説明は少しオフです。 – Andreas

+0

これは非常に役に立ちます。しかし、これも私が試していたものです。この場合、最初の反復で条件が真であれば、このロジックはそれに関連する他の反復子オブジェクトを探しません。私はこのロジックは、オブジェクトが他のオブジェクトを持っている場合にはうまくいくと思いますが、多くのオブジェクトを持つオブジェクトが通過したときには再び移動しません。 – marion

+0

それに関連する他のオブジェクトの意味を説明できますか?イテレータの役割は、コレクション内のすべてのオブジェクトを反復処理することです。この場合、whileループでは、someMethodコレクション内のすべての要素がトラバースされ、それぞれに対して再帰関数が呼び出されます。したがって、これはツリーのすべての要素をカバーする必要があります。あなたの質問をさらに説明していただけますか? –