Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回语句不工作_Java - Fatal编程技术网

Java 返回语句不工作

Java 返回语句不工作,java,Java,有人能帮我解决我的问题吗。我有一个函数,它检查文件是否存在于特定路径中。该函数检查文件名是否匹配,路径是否匹配。(具有特定名称的文件可能存在于多个位置)。请在下面找到我的代码 memberPath是包含相对路径的静态变量。 file_Path是一个静态变量,在找到匹配项时更新 我的问题是函数找到了匹配项,但它脱离了for循环comesto return语句,但返回到for循环。有人能帮我修复代码,这样一旦找到匹配项,它就会将bac返回到调用位置 public static String trav

有人能帮我解决我的问题吗。我有一个函数,它检查文件是否存在于特定路径中。该函数检查文件名是否匹配,路径是否匹配。(具有特定名称的文件可能存在于多个位置)。请在下面找到我的代码

memberPath是包含相对路径的静态变量。 file_Path是一个静态变量,在找到匹配项时更新

我的问题是函数找到了匹配项,但它脱离了for循环comesto return语句,但返回到for循环。有人能帮我修复代码,这样一旦找到匹配项,它就会将bac返回到调用位置

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;
    }