[英]Recursion method continues after returning value?
我正在編寫一個快速的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;
在方法的底部是因為所有方法都需要返回一個值。 無論是否找到該文件。 如果在當前目錄(或其子目錄之一)中找不到該文件,則可以return null;
表明沒有找到它。
側面建議:在Java 8中使用Optional
而不是null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.