我想写这样的代码
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/