ITPUB论坛 » Java企业开发 » 求助!题一道
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-6-29 22:07 xiao_cai
求助!题一道

+----+------+--------+----------------+----------------+--------+
| id | pid  | rootid | title              | cont                | isleaf |
+----+------+--------+----------------+----------------+--------+
|  1 |    0 |      1 | 蚂蚁大战大象   | 蚂蚁大战大象   |      1 |
|  2 |    1 |      1 | 大象被打趴下了 | 大象被打趴下了 |      1 |
|  3 |    2 |      1 | 蚂蚁也不好过   | 蚂蚁也不好过   |      0 |
|  4 |    2 |      1 | 瞎说           | 瞎说           |      1 |
|  5 |    4 |      1 | 没有瞎说       | 没有瞎说       |      0 |
|  6 |    1 |      1 | 怎么可能       | 怎么可能       |      1 |
|  7 |    6 |      1 | 怎么没有可能   | 怎么没有可能   |      0 |
|  8 |    6 |      1 | 可能性很大     | 可能性很大     |      0 |
|  9 |    2 |      1 | 大象进了医院   | 大象进了医院   |      1 |
| 10 |    9 |      1 | 护士是蚂蚁     | 护士是蚂蚁     |      0 |
+----+------+--------+----------------+----------------+--------+

[size=4][color=Red]完成:将表中数据按以下方式排列[/color][/size]

--蚂蚁大战大象
--    大象被打趴下
--            蚂蚁也不好过
--            瞎说
--                没有瞎说
--            大象进医院了
--                护士是蚂蚁
--    怎么可能
--            怎么没有可能
--            可能性是很大的


我的部分代码:
public static void main(String[] args) {
   rs = stmt.executeQuery("select * from article where id = rootid");
        if(rs.next()) {
            int id = rs.getInt("id");
               int level = 2;
            new TestMySql().p(id, level);
        }
}

public  void p(int id, int level) {
    try{                       
        while(rs1.next()) {                       
               for(int i=0; i<level;i++){System.out.print(" ");}
            int isleaf = rs1.getInt("isleaf");
            if(isleaf == 0){
                System.out.println((rs1.getInt("id")));                                       
            }else{
                int p_id = rs1.getInt("id");
                System.out.println(p_id);
                p(p_id, level+2);                                       
            }                               
                }                       
    }catch(SQLException e) {
        e.printStackTrace();
    }               
}


为什么递归到“id=5”就退出了?

2008-6-30 09:21 justforregister
先debug看一下

2008-6-30 10:31 bhan2008
因为你RS的游标已经到了尾端,while循环的条件不满足,当然没有执行结果了。
问题出在ResultSet上,rs作为递归调用的隐含参数,在取值的时候同时改变了自身。可以选择更好的做法,比如先遍历rs,把值读到一个List中...

2008-6-30 13:29 justforregister
rs千万别这么用

2008-7-2 09:35 iooyoo
就是一个树形菜单
递归一下
Node node = root;//
printTree(root);
....

printTree(node) {
print("--" + root.getName());
if(node.hasChildren() {
    for(node in node.children) {
        printTree(node);
    }
}
}
}

页: [1]
查看完整版本: 求助!题一道


Powered by ITPUB论坛