2011-06-03 3 views
1

オブジェクトタイプのリストNode(items)があります。 Nodeクラスには子があります(childItems)。私はol li htmlのマークアップでこの構造体を印刷したいと思います。Javaメソッドの再帰呼び出しからOL LIツリー構造を生成する

再帰的方法での準備。しかし、私の論理には問題があります。私のコードを見てください。

のサイズはです。サンプルのマークアップに従います。 2つのトップレベルの親が存在することを意味します。そして、彼らはさらに彼らのリストとして子供を持っています。

StringBuffer html = new StringBuffer(); 

void printValues(ArrayList items){ 
for (Object o : items){ 
    html.append("<ol>"); 
    html.append("<li>"); 
    Node node = (Node)o; 
    html.append(node.getName); 

    if (node.getChildItems()!= null){ 
     printValues(node.getChildItems()); 
    }else{ 
     html.append("</li>"); 
    } 
    html.append("</ol>"); 
} 
} 
// ........... 
System.out.println(html.toString();); 

//... 
    public class Node{ 
String Name; 
ArrayList childItems = new ArrayList(); // of type Node 
/* getter setters are proper */ 
} 

以下のマークアップは一例です。それはNレベルにすることができます。

<ol> 
<li> 
    Manager 
    <ol> 
     <li> 
      Associate Manager 
      <ol> 
       <li> 
        A.M. Configuration 1 
       </li> 
       <li> 
        A.M. Configuration 2 
       </li> 
       <li> 
        Staff Memmber 
        <ol> 
         <li> 
          Staff Memmber Configuration 
         </li> 
         <!-- can goes on --> 
         <li>...</li> 
        </ol> 
       </li> 
      </ol> 
     </li> 
    </ol> 
</li> 
<li> 
    Client Package 
    <ol> 
     <li> 
      Gold 
      <ol> 
       <li> 
        Feature 1 
       </li> 
       <li> 
        Feature 2 
       </li> 
      </ol> 
     </li> 
    </ol> 
</li> 

+1

あなたの機能を2つに分割します.1つはli、もう1つはol、もう1つは電話をかけます。何が起こっているのかははっきりします –

+0

私はまだそれをどうやってできるのか考えていますか? –

答えて

1

に多く、それを軽減するときに、私が何を意味するかわかります(一例であり、お互いを呼び出す機能に関する私のコメント):

public class LiOl { 
    static StringBuilder sb = new StringBuilder(); 

    static void printList(List<Node> l) { 
    if (l == null || l.size() == 0) { 
     return; 
    } 
    sb.append("<ol>"); 
    for (Node n : l) { 
     printNode(n); 
    } 
    sb.append("</ol>"); 
    } 

    static void printNode(Node n) { 
    sb.append("<li>").append(n.name).append("</li>"); 

    sb.append("<li>"); 
    printList(n.children); 
    sb.append("</li>"); 
    } 

    public static void main(String[] args) { 
    List<Node> l = null; 
    printList(l); 

    sb.toString(); 
    } 
} 

class Node { 
    String name; 
    List<Node> children; 
} 
+0

ありがとうございました。コードが大いに役立ちました。 –

1

この部分は、オーバー働いたする必要があります。

... 
html.append("<li>");  
Node node = (Node)o;  
html.append(node.getName);  
if (node.getChildItems()!= null){   
    printValues(node.getChildItems());  
}else{ 
    html.append("</li>");  
} 
... 

我々はここで

... 
html.append("<li>");  
... 
if (node.getChildItems()!= null){   
    ...  
}else{ 
    html.append("</li>");  
} 
... 
+0

私はそれ以上のポインタを得ることができますか? –

+0

開始liタグと終了タグを見てください。 liを開くといつも閉じる必要がありますが、if条件は常に終了タグをいっぱいにしますか?あなた見えますか? – Omnaest

関連する問題