java - 循环内的递归方法

标签 java for-loop recursion return

我想写这样的代码

public int recursiveMethod() {
    for (int i = 0; i < 10; i++) {
        if (someBool) {
            return recursiveMethod();
        } else {
            return -1;
        }
    }
}

但这会产生编译错误缺少返回语句。还有其他方法可以实现这一目标吗?

更新:实际代码

public static File searchFile(File currentFile) {
    File[] results = null;

    if (currentFile.isDirectory()) {
        for (File file : currentFile.listFiles()) {
            if (file.isDirectory()) {
                return searchFile(file);
            } else {
                results = file.getParentFile().listFiles(new FilenameFilter() {
                    public boolean accept(File dir, String name) {
                        return name.toLowerCase().endsWith(".sh");
                    }
                });

                if (results.length > 0) {
                    return results[0];
                } else {
                    return null;
                }
            }
        }
    } else {
        results = currentFile.getParentFile().listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.toLowerCase().endsWith(".sh");
            }
        });

        if (results.length > 0) {
            return results[0];
        } else {
            return null;
        }
    }
}

最佳答案

你的代码在循环方式上被破坏了——你在第一次迭代时就停止了,要么报告成功,要么报告失败。您应该继续循环,直到找到某些内容或用完要迭代的项目。

我会更改一般结构,以便方法中的last语句return null; - 因此任何时候您可以返回正结果,您都可以这样做,但除此之外,你就让它失败了。所以像这样:

public static File searchFile(File currentFile) {
    if (!currentFile.isDirectory()) {
        throw new InvalidArgumentException("Starting point must be a directory");
    }
    for (File file : currentFile.listFiles()) {
        if (file.isDirectory()) {
            File result = searchFile(file);
            if (result != null) {
                return result;
            }
        } else if (file.getName().toLowerCase().endsWith(".sh")) {
            return file;
        }
    }
    // Not found anything: return null to indicate failure (in this branch)
    return null;
}

(为了简单起见,我删除了对 getParentFile() 的调用并重组了代码。现在它接受目录作为起点,但这简化了事情很大,而且无论如何更有意义,IMO。)

关于java - 循环内的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23627343/

相关文章:

java - 如何使用 Jdom 获取特定标签值

java - 将嵌套的 foreach 循环转换为流

php - 两个表的数组之间的比较

javascript - FreeCodeCamp 的“奇数斐波那契数之和”任务是否有递归版本?

python - 如何在 Python 中构建这样一个函数式编程工具?

java - 尽管在 .andReturn 中设置了一个新对象,EasyMock expect 方法总是返回 null

删除目录时的 Java Ant 性能

java - Java 访问可能不存在的索引

javascript - 用 30 个符号更新每个 h1 标签(h1 标签下方 3 个段落中的 10 个符号)

javascript - 使用回调的递归 Javascript 函数不起作用