Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 466|回复: 0

求指点一下递归中的差异原因。谢谢!

[复制链接]

该用户从未签到

发表于 2015-6-14 12:26:33 | 显示全部楼层 |阅读模式
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集合的结果,我自己觉得

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


这个结果表示存入集合的数据是没问题的,疑问就是怎么取出来的时候用红色代码遍历就会不对呢?   求解答,谢谢!

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-4-20 10:12 , Processed in 0.383090 second(s), 38 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表