
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论坛