如何递归打印文件数组?

时间:2011-05-16 19:44:36

标签: java recursion

我想知道如何递归打印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);,我的代码运行正常,但现在没有任何内容正在打印。

5 个答案:

答案 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);