黑马程序员技术交流社区
标题:
代码出错,求分析
[打印本页]
作者:
dkwoxihuan
时间:
2014-5-22 18:36
标题:
代码出错,求分析
private static File FindA(File dir)
{
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++)
{
if(files[x].isDirectory())
FindA(files[x]);
else
{
if(files[x].toString().endsWith("A.java"))
{
System.out.println("ddd:"+files[x]);
return files[x];
}
}
}
return null;
}
这个代码无法取到以A.java结尾的File 始终返回null, 求分析
还是不太懂递归和文件啊{:3_53:}
作者:
楚轩
时间:
2014-5-22 19:24
哥们,你这代码木有问题呀,我建议你在确认下你指定的文件夹dir下是否有"A.java"文件;
另外一个小小的建议就是老毕说的,当你找不着错了,就按代码先后顺序,写打印语句,判断错误发生在哪里,在纠正,俺也是新手,希望对你有所帮助。
作者:
wangleixhlm
时间:
2014-5-22 19:28
当然有问题啊。FindA函数有返回值,你递归的时候没拿东西接收这个返回值。所以假如这个函数运行时,得到的第一个files[0]是个目录的话,它最后会执行return null。就导致在主函数接收时得到null。
要想不得到null,只有一种情况,就是dir下面只有一个文件,就是以A.java文件结尾。这样结果就会返回一个文件而不是NULL。
我帮你改了一下代码,这样写可以把dir下面所以目录包括子目录都找出以A.java结尾的文件。:
import java.io.*;
import java.util.*;
class test8
{
public static void main(String[] args)
{
File dir = new File("E:\\My Document");
List<File> fl = new ArrayList<File>();
FindA(dir,fl);
Iterator<File> it = fl.iterator();
while(it.hasNext())
System.out.println(it.next());
}
private static void FindA(File dir,List<File> fl)
{
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++)
{
if(files[x].isDirectory())
FindA(files[x],fl);
else
{
if(files[x].toString().endsWith("A.java"))
{
System.out.println("ddd:"+files[x]);
fl.add(files[x]);
}
}
}
}
}
复制代码
作者:
GoodBoy123
时间:
2014-5-22 21:48
这是对文件操作的吗?
作者:
郭帅帅
时间:
2014-5-22 22:01
大哥,你的return null,写错地方了吧
作者:
楚轩
时间:
2014-5-22 23:01
wangleixhlm 发表于 2014-5-22 19:28
当然有问题啊。FindA函数有返回值,你递归的时候没拿东西接收这个返回值。所以假如这个函数运行时,得到的 ...
讨论: 若dir 中有以"A.java"结尾文件,得到的第一个files[0]是目录,确实会执行到return null;但程序会继续循环下去,当执行到以"A.java"结尾的文件时候,就会打印出该文件路径,所以还是能找出来带有"A.java"结尾的文件的,当然这个代码如果同一个目录下有多个"A.java"结尾的文件,则只会找着一个。
另:哥们你的修改也挺到位的,学习了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2