我想知道如何递归打印File []。我已经制作了一个程序,但似乎该程序已超出界限,我不知道如何解决它。有人可以给我一些关于如何解决这个问题的指示或提示吗?感谢。
import java.io.*;
public class RecursiveDir {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[]args) throws IOException {
System.out.print("Please enter a directory name: ");
File f = new File(br.readLine());
FileFilter filter = new FileFilter() {
public boolean accept(File f) {
if(f.isDirectory()) {
return true;
}
return false;
}
};
File[] list = f.listFiles(filter);
System.out.println(returnDir(list,list.length));
}
public static File returnDir(File[] file,int counter) {
File f = file[counter];
if(counter == 0) {
return file[0];
}else {
return f = returnDir(file,counter--);
}
}
}
编辑:我按照下面的评论并将return f = returnDir(file,counter--);
更改为
return f = returnDir(file,--counter);
并将returnDir(list,list.length);
更改为
returnDir(list,list.length-1);
,我的代码运行正常,但现在没有任何内容正在打印。
答案 0 :(得分:3)
您将离开数组绑定,因为您需要将list.length - 1
传递给方法。
即使你这样做了,你也会有无限递归,因为counter--
将使用counter的值,然后递减它。这意味着您使用当前值[{1}}来调用returnDir
使用counter.
或--counter
。
答案 1 :(得分:2)
期待在这里发生什么?在您访问文件时,您似乎没有对文件做任何事情。不需要递归来循环遍历目录中的文件,当您点击 目录的列表中的文件时,需要递归。
答案 2 :(得分:1)
你确实超出了界限。你需要改变
returnDir(list,list.length);
到
returnDir(list,list.length - 1 );
答案 3 :(得分:1)
您似乎缺少System.out.println()调用。您正在遍历文件而不对它们执行任何操作。
答案 4 :(得分:0)
您对returnDir的初始调用应为
returnDir(list,list.length-1);
保