2011-06-03 76 views
1

我有對象類型節點列表(項目)。 Node節點中有子節點(子節點)。我想用ol標籤打印這個結構。從Java方法的遞歸調用生成OL LI樹結構

準備在遞歸方法。但是我的邏輯中存在一些問題。看看我的代碼。

項目的大小將爲2.根據給定的樣本標記。意味着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

將你的函數分成兩部分,一部分是李,另一部分,然後互相調用。將更清晰地發生什麼 – 2011-06-03 20:54:47

+0

我仍在想我該如何做到這一點? – 2011-06-03 21:12:36

回答

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

感謝隊友,你的代碼幫了很大忙。 – 2011-06-05 01:57:12

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

如果我能得到更多的指針呢? – 2011-06-03 21:11:55

+0

看看開放的li標籤和關閉標籤。如果你打開李,你必須關閉它總是,但你的if條件是否總是填滿結束標籤?你看到了嗎? – Omnaest 2011-06-03 21:16:56