2012-05-03 31 views
-1

構造体を塗りつぶす再帰的メソッドに問題がありますLinkedHashMap<String,LinkedHashMap<String, Integer>>再帰メソッドが機能しません

public static LinkedHashMap<String, LinkedHashMap<String, Integer>> GetXMLRegularExpression(
     Node node, LinkedHashMap<String, LinkedHashMap<String, Integer>> a) { 
    List<Element> children = getChildren(node); 
    List<String> childrenString = ConversionString(children); 
    List<String> Clear = RemoveDuplicate(children); 
    LinkedHashMap<String, Integer> lhm = new LinkedHashMap<String, Integer>(); 

    // System.out.println(childrenString); 
    if (!isLeaf(node)) { 
     for (int i = 0; i < Clear.size(); i++) { 
      int count = NumberOfAppear(childrenString, Clear.get(i)); 
      lhm.put(Clear.get(i), count); 
     } 
     a.put(node.getNodeName(), lhm); 
     return a; 

    } else { 
     lhm.put(node.getNodeName(), 0); 
     a.put(node.getNodeName(), lhm); 
     return a; 
    } 

    for (int j = 0; j < children.size(); j++) { 
     return GetXMLRegularExpression(children.get(j), a); 
    } 
} 
+0

isLeaf(node)は何をしますか?私は想像することができますが、人に慣れていないかもしれないメソッドのコードを見ると便利です。 – kentcdodds

答えて

2

コードが問題になります。私は今、三つの異なる場所でそれを入れて試してみました - 最後の見返りに、関数の呼び出しが正しい場所にあるかどうかはわかりません。あなたはループ内に "return"ステートメントを埋め込みました。これは変です。この関数から複数の値を返そうとしていますか?ループの1回目の反復で、この関数の実行を終了する "return"ステートメントが実行されます。

+0

もそうですが、コードにも到達していません。 "if"と "else"の両方にreturn文があるので、forループの前にそれらのうちの1つが実行されます。 –

+0

まさに!これを指摘してくれてありがとう。私は質問を読んだ後、最後のリターンに飛び乗った。 :) –

関連する問題