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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海涛 中级黑马   /  2013-1-13 07:48  /  1942 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张海涛 于 2013-1-15 01:47 编辑

(手机发表,格式可能有点乱,望谅解,没网的孩纸伤不起啊!)想要将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 神马都是浮云

查看全部评分

7 个回复

倒序浏览
LZ 对成员方法与类的关联以及调用和返回值了解深浅,多练习练习
容器对象list调用了fileToList()方法 无返回值,此容器list的数据放在缓存堆区,而后面就直接打印容器list的所有数据
所以fileTolist()方法里没必要覆写Objetc的toString()方法 就是说此方法里System.out.println(list)是多余了

另外一种改法,fileToList()函数里保留 System.out.println(list),那么主线程main()没必要重写System.out.println(list),容器list调用fileToList()自然会打印对象堆区所有数组...

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
LZ 您的代码  我测试了没有问题    您最好把你的错误说清楚  或者看看你提问的代码是不是跟你的问题不一样
我真不知道 楼上是怎么看出错误来到   
回复 使用道具 举报
楼上貌似说的不对
楼主的问题是没有理解好递归方法的执行顺序。
如果只有一个文件夹如:"d:"+File.separator+"java2",这个文件夹下面没有子文件夹,SOP写在哪里都一样。
但是如果有子文件夹,情况就不同了。下载递归方法里,会发现打印了多行,说明SOP语句被多次执行。因为每递归处理一个文件夹它都执行了一次,如果文件夹中有.java文件就添加进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);//为什么把输出语句放在这输出的集合是错误的的        
//System.out.println(list);//为什么把输出语句放在这输出的集合是错误的的 这是因为你要输出的list是函数要传进来的参数,还没有值,所以错了
回复 使用道具 举报
张森 发表于 2013-1-13 11:37
LZ 您的代码  我测试了没有问题    您最好把你的错误说清楚  或者看看你提问的代码是不是跟你的问题不一样
...

代码确实没错,你详细看题,LZ 对 oop概念相当浅
回复 使用道具 举报
张森 中级黑马 2013-1-13 13:43:58
7#
赵文 发表于 2013-1-13 13:40
代码确实没错,你详细看题,LZ 对 oop概念相当浅

恩  谢谢   也学习了  
回复 使用道具 举报
jonn 高级黑马 2013-1-13 13:45:11
8#
张森 发表于 2013-1-13 13:43
恩  谢谢   也学习了

:handshake 共同学习...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马