已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > 其他编程语言 > 讨论/求助

标题: 递归确实好强大~~

作者: @Ta

时间: 2013-02-22

点击: 3354

以前都是听书上说递归是秘密武器,今天终于体会到了。
突然想知道一下电脑里有多少首歌,就把以前写的(根据所输路径,打印该路径下的文件(夹))的程序找出来,直接继承继续写。也就是说此时的程序已经具备保存当前目录中所有的文件和文件夹到数组的功能了 (不包括子文件夹中的任何东西,读取子文件夹中的歌曲就是本文的重点嘛) 下面代码中的files就是所指的数组变量。
这样的话,先判断是文件还是文件夹。如果是文件的话,就再判断是不是歌曲,是的话,就存进集合filesNameOnly里;如果是文件夹的话,就。。。已经写到这里了,突然就卡住了,因为文件夹里可能还有文件夹,这是无底洞呀……
然后我看了下这个方法的参数,没错,就是File[ ]类型的,读取上面的文件夹里的内容(文件和文件夹),居然完全可以调用自身,而且几乎filesNameOnly是实例域,不会在接下来的方法中清零的。最后我还检查了两点:1.是不是每递归一次,任务(文件夹数)就少一点;2.当最后文件夹检查完后,能不能正常退出递归。没学到两样都正好满足了。
哈哈,好吧水到渠成了……下面是递归部分的实现部分(主要变量上面都有提到的)。太开心了,所以可能有点模仿大神的意思,见谅见谅~~

public void getMusics(File[] files){
     // The powerful recursion!!! 
if(files != null ){
for(File file : files){
if(file.isFile( ))
if(checkIsMusic(file))
       filesNamesOnly .add(file );
if(file.isDirectory( )){
getMusics(file.listFiles( ));
}
}
}
}

[隐藏样式|查看源码]


『回复列表(5|隐藏机器人聊天)』

1. what?神啊!膜拜!
(/@Ta/2013-02-22 19:32//)

2. 写的什么程序?不是php吧?
(/@Ta/2013-02-22 20:13//)

3. C++?
(/@Ta/2013-02-22 21:24//)

4. @老虎会游泳 是java中的……
(/@Ta/2013-02-22 23:11//)

5. @love封尘 ……
(/@Ta/2013-02-22 23:13//)

回复需要登录

9月26日 05:47 星期五

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1