|
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集合的结果,我自己觉得
*蚂蚁大战大象
*---大象被打趴下了
*------蚂蚁也不好过
*------瞎说
*---------没有瞎说
*------大象进医院了
*---------护士是蚂蚁
*---怎么可能
*------怎么没有可能
*------可能性是很大的
这个结果表示存入集合的数据是没问题的,疑问就是怎么取出来的时候用红色代码遍历就会不对呢? 求解答,谢谢!
|
|