簡體   English   中英

返回值后遞歸方法會繼續嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM