2015-06-27 113 views
-3

早先我創建了Java中的遞歸程序,其中有一個場景,其中有一個Folder,並且該文件夾有一組File's和一些Folder's(請注意,實際場景不同,它不是文件夾和文件)。因此,無論何時我在程序中找到一個文件夾,我都會遞歸地調用我的函數來讀取它中的文件和文件夾,直到找不到更多文件夾。如何創建遞歸函數

這是我剛纔寫的代碼:我賦予了新的任務

import java.io.File; 

public class Filewalker { 

    public void walk(String path) { 

     File root = new File(path); 
     File[] list = root.listFiles(); 

     if (list == null) return; 

     for (File f : list) { 
      if (f.isDirectory()) { 
       walk(f.getAbsolutePath()); 
       System.out.println("Dir:" + f.getAbsoluteFile()); 
      } 
      else { 
       System.out.println("File:" + f.getAbsoluteFile()); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Filewalker fw = new Filewalker(); 
     fw.walk("C:\\Java"); 
    } 

} 

現在這裏的情況是這樣的:

一個Folder是有剛File's,我被要求準備這是一個遞歸函數。現在我擅長編寫一個程序,在該程序中讀取文件夾及其中的文件。但是,在這種情況下,沒有子文件夾,所以我無法找到如何準備一個遞歸場景來開發我的Java程序。

你能指導我如何在這種用例中準備遞歸程序嗎?可能嗎?

+2

顯示我們到目前爲止你做了什麼。發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡短,獨立,正確的示例)。 – Madhan

+1

這是由設置作業的人員更好地回答的問題。如果沒有充足的理由,你可以問他們爲什麼要使用遞歸。 –

+0

這裏不需要遞歸。只有在從一開始就不知道深度時才使用這種技術。 –

回答

1

爲了編寫任何遞歸函數,您需要定義一個條件,它是您的停止點。
當您確定該條件時,您要麼停止,要麼執行一些依賴於遞歸的處理邏輯。
是否只有3個文件或N個文件是不相關的。您只需要以遞歸方式定義處理步驟,即可以通過清除條件來終止遞歸,從而停止遞歸。

您的任務的實際需求並不清楚。
有很多方法可以解決的聲明A Folder is having just 3 File's and I was asked to prepare a recursive function on this.
一個例子:

public void processFile(File[] files, int index) { 
    if(index < 0 || index >= files.length) return; 
    File fileToProcess = files[index]; 
    //processing logic 
    processFile(files, index + 1); 
} 
+0

感謝評論,我有關於遞歸的想法,但我怎麼才能實現它爲我的場景解釋? – user3181365

+0

@ user3181365:查看更新 – Cratylus

+0

@HovercraftFullOfEels,我完成了功課,但在這裏如何使用遞歸卡住了。所以來這裏的正確方法,對不起,如果它傷害任何人 – user3181365