gpt4 book ai didi

java - 递归方法在返回值后继续?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:43 24 4
gpt4 key购买 nike

我正在编写一个快速的 Java 递归方法,给定一个根文件夹和文件名,在您的文件中搜索所述文件名。

import Java.io.File;

public static String searchForFile(File currentFolder, String filename)
{
try
{
File[] path = currentFolder.listFiles();

for (int i = 0; i < path.length; i++)
{
if (path[i].isDirectory())
{
System.out.println("Directory: " + path[i].toString());
searchForFile(path[i], filename);
}
else
{
System.out.println("File: " + path[i].toString());

if(path[i].getName().equals(filename))
{
System.out.println("Your file has been found!";
return path[i].toString();
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}

return null; // Omitting this line yields compiling errors, not sure why?
}

public static void main(String[] args)
{
System.out.println("Hello, enter the root folder and file name.");
String rootFolder = "Desktop";
String fileName = "Hello.txt";

File f = new File("C:\\Users\\Me\\" + rootFolder);
searchForFile(f, fileName);

}

程序本身在技术上是可行的,但是 searchForFile() 即使在找到所请求的文件之后也会继续迭代。例如,我会得到如下输出:

File: C:\Users\Me\Desktop\My Stuff\NotHello.txt
**File: C:\Users\Me\Desktop\My Stuff\Hello.txt**

Your file has been found!

File: C:\Users\Me\Desktop\My Stuff\AlsoNotHello.txt
File: C:\Users\Me\Desktop\My Stuff\StillNotHello.txt
File: C:\Users\Me\Desktop\My Stuff\WhyIsThisMethodStillRunning.txt

一段时间以来,我一直在摸不着头脑。我以为 return 总是退出方法,那么为什么即使在返回值后递归仍在继续?我还没有发现任何类似的问题,所以任何帮助将不胜感激!

(此外,如果未找到所请求的文件,我该如何编辑该方法以使其返回空白 "" 字符串?)

最佳答案

当您找到文件时,您将从最内层的调用返回。但是当你扫描一个目录时,你并没有使用返回值。

改变这个:

searchForFile(path[i], filename);

到:

String result = searchForFile(path[i], filename);
if (result != null) {
return result;
}

方法底部的 return null; 在那里,因为所有方法都需要返回一个值。不管文件是否找到。如果在当前目录(或其子目录之一)中未找到该文件,您可以返回 null; 以指示未找到该文件。

附带建议:在 Java 8 中使用 Optional 而不是 null

关于java - 递归方法在返回值后继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43712687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com