Java 返回语句不工作
有人能帮我解决我的问题吗。我有一个函数,它检查文件是否存在于特定路径中。该函数检查文件名是否匹配,路径是否匹配。(具有特定名称的文件可能存在于多个位置)。请在下面找到我的代码 memberPath是包含相对路径的静态变量。 file_Path是一个静态变量,在找到匹配项时更新 我的问题是函数找到了匹配项,但它脱离了for循环comesto return语句,但返回到for循环。有人能帮我修复代码,这样一旦找到匹配项,它就会将bac返回到调用位置Java 返回语句不工作,java,Java,有人能帮我解决我的问题吗。我有一个函数,它检查文件是否存在于特定路径中。该函数检查文件名是否匹配,路径是否匹配。(具有特定名称的文件可能存在于多个位置)。请在下面找到我的代码 memberPath是包含相对路径的静态变量。 file_Path是一个静态变量,在找到匹配项时更新 我的问题是函数找到了匹配项,但它脱离了for循环comesto return语句,但返回到for循环。有人能帮我修复代码,这样一旦找到匹配项,它就会将bac返回到调用位置 public static String trav
public static String traverse(String path, String filename) {
String filePath = null;
File root = new File(path);
File[] list = root.listFiles();
for (File f : list) {
if (f.isDirectory()) {
traverse(f.getAbsolutePath(), filename);
} else if (f.getName().equalsIgnoreCase(filename) && f.getAbsolutePath().endsWith(memberPath)) {
filePath = f.getAbsolutePath();
file_Path = filePath;
break ;
}
}
return filePath;
}
加:
返回通过此调用获得的值
正如所指出的-您可以返回值而不是中断。递归的工作方式是函数调用自身。因此,当您的函数
返回
s时,它将返回for循环,因为它很可能是外部函数(调用它的函数)从下面一行调用它
if (f.isDirectory()) {
traverse(f.getAbsolutePath(), filename);
既然是这样,您需要按照baraky的解释在这里添加返回,否则您将丢失内部函数派生的答案。正如baraky、Karthik和JanDvorak所指出的,更新后的代码是:
public String traverse(String path, String filename) {
String filePath = null;
File root = new File(path);
File[] list = root.listFiles();
for (File f : list) {
if (f.isDirectory()) {
return traverse(f.getAbsolutePath(), filename);
} else if (f.getName().equalsIgnoreCase(filename)
&& f.getAbsolutePath().endsWith(memberPath)) {
filePath = f.getAbsolutePath();
file_Path = filePath;
return filePath;
}
}
return filePath;
}
谢谢大家 递归就是这样进行的。你以为会发生什么?为什么不立即返回,而不是中断?@RohitJain:但你能告诉我应该添加什么,以便它返回到呼叫position@JanDvorak当前位置没用。它再次返回到for loopu,意思是在file_Path=filePath之后;而不是休息;添加返回遍历(f.getAbsolutePath(),文件名);对只返回filePath而不是break。这没什么大不了的,但更好的是,你手中已经有了价值,你可以退货。像这样?公共静态字符串遍历(字符串路径,字符串文件名){String filePath=null;File root=new File(path);File[]list=root.listFiles();for(File f:list){if(f.isDirectory()){traverse(f.getAbsolutePath(),filename);}else if(f.getName().equalsIgnoreCase)(文件名){filePath=f.getAbsolutePath();file_Path=filePath;return traverse(f.getAbsolutePath(),filename);}}}return filePath;}否。首先,在“traverse(f.getAbsolutePath(),filename)”之前添加“return”。这应该可以修复您的错误。将“break”更改为“returnfilepath”只是表面上的改变。如果你不这样做,代码会起作用,但是这样写代码更好。
public String traverse(String path, String filename) {
String filePath = null;
File root = new File(path);
File[] list = root.listFiles();
for (File f : list) {
if (f.isDirectory()) {
return traverse(f.getAbsolutePath(), filename);
} else if (f.getName().equalsIgnoreCase(filename)
&& f.getAbsolutePath().endsWith(memberPath)) {
filePath = f.getAbsolutePath();
file_Path = filePath;
return filePath;
}
}
return filePath;
}