黑马程序员技术交流社区
标题:
递归问题?
[打印本页]
作者:
李柯
时间:
2012-4-10 02:35
标题:
递归问题?
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
File dir=new File("F:\\test.txt");
removeDir(dir);
}
public static void removeDir(File dir)
{
File[] files = dir.listFiles();
for (int x=0;x<files.length ;x++ )
{
if (files[x].isDirectory())
removeDir(files[x]);
else[backcolor=Red]//为什么将else注释掉以后有的文件夹会被删两次?希望谁能解释一下?谢谢![/backcolor]
System.out.println(files[x].toString()+"-file-"+files[x].delete());
}
System.out.println(dir+"::dir::"+dir.delete());
}
}
复制代码
作者:
宋蕈
时间:
2012-4-10 09:00
如果你注释掉了else
你这里就出了点逻辑错误,因为,当你判断出 files[x] 不是文件夹
后,还是继续会执行了下面那句即:
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
File dir=new File("F:\\test.txt");
removeDir(dir);
}
public static void removeDir(File dir)
{
File[] files = dir.listFiles();
for (int x=0;x<files.length ;x++ )
{
if (files[x].isDirectory())
removeDir(files[x]);
else // 这里注释掉, 但下面这句都会执行的
System.out.println(files[x].toString()+"-file-"+files[x].delete());
}
System.out.println(dir+"::dir::"+dir.delete());
}
}
作者:
郑苑东
时间:
2012-4-10 09:03
因为你上面再if里面会删除一次。。如果外面不else。也会被执行。。。当他进入if里面删除了一次。。因为你外面没有else。。所以外面的那句不过是文件夹。。文件都会再删除一次。。。所以有的文件夹被删除了两次。。。
作者:
郑苑东
时间:
2012-4-10 09:05
本帖最后由 郑苑东 于 2012-4-10 09:07 编辑
if的意思是说当他是文件夹的时候进入 if 里面的代码。。这时候会删除会执行一次删除。。而如果你不加else删除。。那么下面那句就会变成可能会被执行的。。这时候无论文件,,,文件夹都会被删除。。。而执行完for循环之后 最后面的代码还会删除一次。。所以是两次。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2