A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘菲 中级黑马   /  2012-11-22 21:41  /  1409 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘菲 于 2012-11-23 13:40 编辑

想要将d:\java文件夹中的".java"文件,全都取出并存储到list集合中,并打印验证结果,
在打印时遇到了问题
下面是代码:
        public static void main(String[] args)
        {
                File dir=new File("d:"+File.separator+"java2");//d:\java2
                List<File> list=new ArrayList<File>();
                fileToList(dir,list);
                System.out.println(list);//在这输出的集合是正确的
               
        }
        public static void fileToList(File dir,List<File> list)
        {
                File[] files=dir.listFiles();
                for(File file:files)
                {
                        if(file.isDirectory())
                                fileToList(file,list);
                        else
                        {
                                if(file.getName().endsWith(".java"))
                                        list.add(file);
                        }
                }
                //System.out.println(list);//为什么把输出语句放在这输出的集合是错误的的
        }

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
你下面那句输出语句中的list是形式参数,应该不能打印
回复 使用道具 举报
如果你的输出语句定义在方法内的话,那么在递归的过程中,每次调用到fileToList()都会执行一次输出语句,
所以递归的次数和你打印输出的次数是相符的,也就是在递归的末端,可能是list打印的结果是一个元素,但递归回来的话,list装的元素会越来越多。
你打印出来的集合长度也越来越大。虽然都是一个list,但你打印的是一个list的变化过程,最后打印的那个结果才是需要的结果。
回复 使用道具 举报
张学永 发表于 2012-11-22 22:02
如果你的输出语句定义在方法内的话,那么在递归的过程中,每次调用到fileToList()都会执行一次输出语句,
...

谢谢你的回答!
但是我还是有些不明白,我觉得在递归的过程中并没有执行到输出语句啊
你能不能帮忙分析下具体过程呢  
十分感谢!
回复 使用道具 举报
刘菲 发表于 2012-11-22 23:59
谢谢你的回答!
但是我还是有些不明白,我觉得在递归的过程中并没有执行到输出语句啊
你能不能帮忙分析下 ...

这么晚了还没睡啊,你可以这样分析啊:当递归到最后一次了,for循环的内容结束了,就会往下执行了,然后执行一次输出语句。接着返回上一层,而上一层的for循环执行完,也会执行for循环下面的输出语句的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马