2

誰かが私の問題を解決するのを手伝ってくれますか? ファイルが特定のパスに存在するかどうかをチェックする関数があります。この関数は、ファイル名が一致し、パスも一致するかどうかをチェックします (特定の名前のファイルが複数の場所に存在する可能性があります)。私のコードの下に見つけてください。

memberPath は、相対パスを含む静的変数です。file_Path は、一致が見つかったときに更新される静的変数です。

私の問題は、関数が一致を見つけることですが、forループから抜け出し、ステートメントを返すようになりますが、forループに戻ります。誰かがコードを修正して、一致が見つかったら呼び出し位置に戻るように手伝ってくれませんか。

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

3 に答える 3

6

追加 :

return traverse(f.getAbsolutePath(), filename);

この呼び出しで取得した値を返します。

指摘したように、ブレークの代わりに値を返すことができます。

于 2013-02-19T08:36:43.977 に答える
3

再帰が機能する方法は、関数が自分自身を呼び出すことです。したがって、関数returnが s になると、for ループに戻ります。これは、外側の関数 (それを呼び出した関数) が以下の行から呼び出した可能性が高いためです。

if (f.isDirectory()) {
            traverse(f.getAbsolutePath(), filename);

これが事実であるため、baraky が説明するように、ここに return を追加する必要があります。そうしないと、内部関数が導出した答えが失われます。

于 2013-02-19T08:39:43.670 に答える
1

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

みんなありがとう!!

于 2013-02-19T09:13:52.433 に答える