我想写一个像这样的代码
public int recursiveMethod() {
for (int i = 0; i < 10; i++) {
if (someBool) {
return recursiveMethod();
} else {
return -1;
}
}
}
但这会产生编译错误missing return statement
。还有其他方法我可以做到这一点。
更新:实际代码
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;
}
}
}
答案 0 :(得分:3)
您的代码以其循环方式被破坏 - 您在第一次迭代时停止报告成功或失败。你 应该继续循环,直到找到一些东西或者用完了一些东西来迭代。
我会更改一般结构,以便方法中的 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会更有意义。)
答案 1 :(得分:0)
什么是someBool
?
如果someBool为true且每次调用recursiveMethod()
,则调用recursiveMethod()
,i的值从0开始并继续调用recursiveMethod()
。
如前面的评论中所提到的,只需在方法的最后添加一个return语句并不能保证你实现了所需的目标