我试图更熟悉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'而不一定缩小它..我不是什么看到?
答案 0 :(得分:4)
你的代码看起来很不错,但你没有得到输出,因为你没有打印它!
只需在主要方法中添加System.out.println(...)
即可。
System.out.println("Frequency is: " + c.freq(input, p));
答案 1 :(得分:1)
对于这部分:
我在网上查找了freq(c.substring(1,c.length()),p);部分,但通过代码它没有意义..似乎在每一次传递它仍然将处理'aa'而不一定缩小它。
行c.substring(1, c.length())
缩小字符串c
,以便传递给递归调用的内容少一个要处理的字符,从而帮助递归调用最终达到{{1的终止条件}}。因此,可以安全地假设c.length() == 0
方法的实现是正确的。