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

您的代码看起来不错,但您没有得到输出,因为您没有打印它!

只需将 a 添加System.out.println(...)到您的主要方法中。

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())缩小了字符串c,以便传递给递归调用的内容减少了一个要处理的字符,从而帮助递归调用最终达到 的终止条件c.length() == 0。因此,可以安全地假设该freq方法的实现是正确的。

于 2013-07-17T03:21:05.797 回答