打印

[Java] 求助!题一道

求助!题一道

+----+------+--------+----------------+----------------+--------+
| 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 |
+----+------+--------+----------------+----------------+--------+

完成:将表中数据按以下方式排列

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


我的部分代码:
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”就退出了?

TOP

先debug看一下

TOP

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

TOP

rs千万别这么用

TOP

就是一个树形菜单
递归一下
Node node = root;//
printTree(root);
....

printTree(node) {
print("--" + root.getName());
if(node.hasChildren() {
    for(node in node.children) {
        printTree(node);
    }
}
}
}
[php] 使君欲醉离亭酒 酒醒离愁转有 紫禁多时虚右 苕霄留难久 一声歌掩双罗袖 日落乱山春后 犹有东城烟柳 青荫长依旧 [/php]

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-12-3 08:42 京ICP证060528 号

Designed By 17DST