0

Javaの再帰にもっと慣れようとしています。特定の文字列に文字が出現する回数を数えようとしています。

public class apptest {

    public static void main(String[] args) {
        apptest c = new apptest();
        String input = "aaa";
        char p = 'a';

        c.freq(input, p);
    }

    public int freq(String c, char p) {
        if (c.length() == 0) {
            return 0;
        } else if (c.charAt(0) == p) {

            return 1 + freq(c.substring(1, c.length()), p);
        } else
            return freq(c.substring(1, c.length()), p);
    }
}

出力が得られません。このような問題を解決する方法について完全に混乱しています。私はオンラインでそのfreq(c.substring(1, c.length()),p);部分を見つけましたが、コードを調べても意味がありません..すべてのパスでまだ「aa」を処理しているようで、必ずしもそれを縮小するとは限りません..何が見えないのですか?

4

2 に答える 2

4

コードはきれいに見えますが、印刷していないため、出力が得られません!

System.out.println(...)aを main メソッドに追加するだけです。

System.out.println("Frequency is: " + c.freq(input, p));
于 2013-07-17T03:21:09.650 に答える
1

この部分について:

オンラインで調べたところ、 freq(c.substring(1, c.length()),p); が見つかりました。一部ですが、コードを調べても意味がありません..すべてのパスで、「aa」を処理し、必ずしも縮小するわけではないようです。

この行c.substring(1, c.length())は String を縮小cして、再帰呼び出しに渡される文字が 1 文字少なくなるようにし、再帰呼び出しが最終的に の終了条件に到達するのを助けますc.length() == 0freqしたがって、メソッドの実装が正しいと想定しても安全です。

于 2013-07-17T03:21:05.797 に答える