You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过递归初始化StringSet类状态,实现与for循环相同的文件列表效果

解决递归实现无法正确赋值数组的问题

原递归代码的核心问题是每次调用StringToFile方法时都会重新执行ss = new String[dirFiles.length];,这会导致每一层递归都重置数组,之前递归中已经赋值的元素全部被清空。当递归结束时,ss是最后一次调用方法时创建的空数组,自然没有输出。

修改方案

  • 将数组初始化代码从递归方法中移出,放到构造函数里,确保只初始化一次数组
  • 递归方法仅负责遍历赋值逻辑,不再重复创建数组
  • 增加空指针判断,避免listFiles()返回null时出现异常

修改后的完整代码

import java.io.File;

class StringSet {
    private String[] ss;

    File currentDirectory = new File(".");
    File[] dirFiles = currentDirectory.listFiles();

    public StringSet() {
        // 仅在构造函数中初始化一次数组,同时处理dirFiles为null的情况
        if (dirFiles != null) {
            ss = new String[dirFiles.length];
            StringToFile(0, dirFiles.length);
        }
    }

    public void StringToFile(int start, int end) {
        if (start == end)
            return;

        if (dirFiles[start].isFile())
            ss[start] = dirFiles[start].getPath();

        StringToFile(start + 1, end);
    }

    public String toString() {
        String s="";
        if (ss == null) return s;
        for (int i=0; i<ss.length; i++)
            if (ss[i]!=null)
                s+=ss[i]+"\n";
        if (s.length()>0)
            s = s.substring(0,s.length()-1);
        return s;
    }
}

内容的提问来源于stack exchange,提问作者xercase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:27:25