关于java递归只能查出根目录问题

曾经的十字镐 发布于 2015/05/18 15:30
阅读 268
收藏 0

数据库:

只能查到根目录:中国 为何?

加载中
0
思无邪_NO1
你这相当于循环还没与执行完就去调自己了,你可以吧每次循环所得的id用list装起来,等循环完了调用自己的方法  ,genericTree(list<String> ids),  然后每次进去,先循环出id,再循环item...
0

目测没问题,,debug 跟一下

0
杨中仁
杨中仁
目测没问题,,debug 跟一下
0
eechen
eechen
我去,这是在收集我军情报吗!贵公司在为谁服务?
0
cnDavidChen
cnDavidChen


首先,楼主你暴露了**机密,深感担忧……

====

好,说正事

1、令pid=-1,items只有一个元素,“中国”;

2、items在整个代码中都没有再被重新赋值;(可以看到,在方法里调用自己this.genericTree()的时候,并么有把items传进去,也就是说,不管这个方法里发生什么,外面的items是不会有任何改变的)

3、所以返回的肯定还是只有一个中国的items了。

=====

items.get(i).setItems()这个方法影响的也只是item这个对象的内容,对于items这个列表,如items.size()是没有影响的,还是1。

=====

楼主想把所有的子对象都查到放到一个列表对吧?那么不能用返回列表的方式来递归。应该把一个空列表作为参数传进递归方法里。如下:


// 递归算法最重要的是找到终结点,这里的终结点是查出来的子列表为空
public void genericTree(List<Comrade> children, pid) {
    List<Comrade> items = comradeMapper.findComradeByPid(pid);
    children.addAll(items); // 把查到的直接子节点都放到列表里
    
    // 结束点
    if (items == null || items.size() == 0) {
    	return;
    }
    
    // 再查找孙节点放进来
    for (Comrade item : items) {
    	genericTree(children, item.getId());
    } 
}

由此,方法执行结束后,children就是你想要的内容了。



返回顶部
顶部