2011-06-23 11 views
0

私はここに、この簡単な方法があります:Return文が機能しません!

private Node addItem(Node current, Node target) { 
    if (current.data.getId() < target.data.getId()) { 
     if (current.larger == null) { 
      current.larger = target; 
      Log.i("BinaryTree", "Added item: " + target.data.getId()); 
      return target; 
     } 
     return addItem(current.larger, target); 
    } else { 
     if (current.smaller == null) { 
      current.smaller = target; 
      Log.i("BinaryTree", "Added item: " + target.data.getId()); 
      return target; 
     } 
     return addItem(current.smaller, target); 
    } 
} 

私はそれをデバッグするとき、コードが行になる「リターン・ターゲット;」、およびそれをスキップして、最後のreturn文に行く - 「のaddItemを返します(現在のより小さい、目標); '! 私はこの世のようなものは見たことがありません!

+0

それがああ待って待ってreturn文 –

+2

に達した場合、私は、これは再帰的な方法であり、法の外に出る必要があります。<_ < –

+0

たぶん、あなたはバイトコードで見ることができます。デバッガでのみダブルリターンを得るか、またはプログラムが独自に実行されているときにも、 – toto2

答えて

8

おそらく、あなたのデバッグが「戻る」方法を飛ばしているのを見たことがあります。

あなたはaddItemを再帰呼び出しします。最終的にはそれを実際に追加して元に戻すことになるでしょう。別のリターンにジャンプするように見えるでしょう。なぜなら、あなたがそこから発信されたメソッドコールを返すからです。

+0

私はスタックトレースを見ましたが、別のメソッドからの単一呼び出し以外に再帰呼び出しは表示されません – saarraz1

+0

この場合、あなたは少なくとも、最初のリターンのブレークポイントからあなたの質問にスタックトレース全体を投稿できますか? (だから最後の返信を続ける前に) – Yhn

+0

私は日食がスタックを正しく表示しないと思う 私はデバッグウィンドウで再帰呼び出しを表示していないよ – saarraz1

2

return文に達していれば、そのメソッドから確実に戻ります。あなたが(再帰的なので)あなたが少しのSystem.out.println()文を置いてみてください。例えば

... 
Log.i("BinaryTree", "Added item: " + target.data.getId()); 
System.out.println("Returning: " + target.toString()); 
return target; 
... 
関連する問題