| 
 | 
 
3Java金币 
java初学者,今天在用一个树状结构的显示,自己用了两种写法,出现了一种遍历出问题。 
数据库中的数据如下: 
     
 
首先是正常遍历结果的代码: 
---------------------------------------------------------------------------------------------------------------- 
       package com.test.tree; 
 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
 
import com.juan.bbs.DB; 
import com.juan.bbs.entity.Article; 
 
public class TestTree { 
 
        public static void main(String[] args) { 
                List<Article> articles = new ArrayList<Article>(); 
                Connection conn = DB.getConnection(); 
         
                tree(articles,conn,0,"*"); 
                printTree(articles); 
                 
        } 
         
        private static void tree(List<Article> articles ,Connection conn,int id,String prefix){ 
                String sql = "select * from article where pid = " + id; 
                Statement stmt = DB.createStatement(conn); 
                ResultSet rs = DB.executeQuery(stmt, sql);  
                        try{ 
                                          
                                //Article atcl = new Article(); 
                                        while(rs.next()){ 
                                                Article atcl = new Article(); 
                                                atcl.setId(rs.getInt("id"));                                                 
                                                atcl.setPid(rs.getInt("pid")); 
                                                atcl.setRootid(rs.getInt("rootid")); 
                                                atcl.setTitle(prefix + rs.getString("title") ); 
                                                atcl.setLeaf(rs.getInt("leaf")); 
                                                atcl.setPdate(rs.getDate("pdate")); 
                                                articles.add(atcl); 
                                                System.out.println(atcl.getTitle()); 
                                                if(atcl.isLeaf()==1){ 
                                                        tree(articles,conn,rs.getInt("id"),prefix+"---"); 
                                                } 
                                        } 
                                         
                                         
                        }catch(SQLException e){ 
                                e.printStackTrace(); 
                        }finally { 
                                DB.close(rs); 
                                DB.close(stmt); 
                        } 
        } 
         
         
        public static void printTree(List<Article> articles){ 
                for(Iterator<Article> it = articles.iterator();it.hasNext();){ 
                        Article a = it.next(); 
                        System.out.println(a.getTitle() + "out"); 
                         
                } 
        } 
 
} 
--------------------------------------------------------------------------------------------------------------- 
 
如果将红色代码注释而用蓝色的这显示结果为 
 
 *蚂蚁大战大象 
*---大象被打趴下了 
*------蚂蚁也不好过 
*------瞎说 
*---------没有瞎说 
*------大象进医院了 
*---------护士是蚂蚁 
*---怎么可能 
*------怎么没有可能 
*------可能性是很大的 
 
*蚂蚁大战大象out 
*---大象被打趴下了out 
*------蚂蚁也不好过out 
*------瞎说out 
*---------没有瞎说out 
*------大象进医院了out 
*---------护士是蚂蚁out 
*---怎么可能out 
*------怎么没有可能out 
*------可能性是很大的out 
--------------------------------------------- 
如果用红色的而将蓝色代码注释则输出结果为: 
*蚂蚁大战大象 
*---大象被打趴下了 
*------蚂蚁也不好过 
*------瞎说 
*---------没有瞎说 
*------大象进医院了 
*---------护士是蚂蚁 
*---怎么可能 
*------怎么没有可能 
*------可能性是很大的 
 
*蚂蚁大战大象out 
*---怎么可能out 
*------大象进医院了out 
*------大象进医院了out 
*---------没有瞎说out 
*------大象进医院了out 
*---------护士是蚂蚁out 
*---怎么可能out 
*------可能性是很大的out 
*------可能性是很大的out 
 
------------------------------------------------------------------------------- 
我自己觉得输出结果带out的是遍历结果,不带的就是存入articles集合的结果,我自己觉得 
 
*蚂蚁大战大象 
*---大象被打趴下了 
*------蚂蚁也不好过 
*------瞎说 
*---------没有瞎说 
*------大象进医院了 
*---------护士是蚂蚁 
*---怎么可能 
*------怎么没有可能 
*------可能性是很大的 
 
 
这个结果表示存入集合的数据是没问题的,疑问就是怎么取出来的时候用红色代码遍历就会不对呢?   求解答,谢谢! 
 |   
 
 
 
 
 
 |