如何通过递归初始化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
相关产品推荐
相关产品推荐

