You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归统计字符串中"aaa"出现次数的Java代码报错求助

问题排查与代码修正

先拆解你代码里的核心问题:

  • 变量作用域错误:第一个if(e>st.length()-1)分支直接返回count,但count是在这个分支之后才声明的,编译器自然找不到这个未提前定义的变量。
  • 递归结果未累计:调用retcount(st,s+1,e+1)时,没有把递归返回的计数加到当前count里,每次递归都会重新初始化count=0,最后只返回当前层的数值,根本无法累计总次数。
  • 判断逻辑完全无效:st.contains(st.substring(s,e))永远为true——substring(s,e)本身就是st的子串,这等于没做任何有效判断,你需要直接检查当前子串是否等于目标字符串"aaa"。
  • 参数逻辑混乱:要匹配长度为3的"aaa",子串的结束索引应该是起始索引+3,而非靠参数随意控制,初始调用也应该对应这个逻辑。

修正后的递归代码

public static int retcount(String st, int s) {
    // 终止条件:剩余字符不足3个,无法匹配"aaa"
    if (s + 3 > st.length()) {
        return 0;
    }
    int count = 0;
    // 检查当前起始位置的3个字符是否为"aaa"
    if (st.substring(s, s + 3).equals("aaa")) {
        count += 1;
    }
    // 递归处理下一个起始位置,累加后续的计数结果
    count += retcount(st, s + 1);
    return count;
}

调用示例

public static void main(String[] args) {
    String input = "aaaaaa";
    // 从索引0开始检查
    int result = retcount(input, 0);
    System.out.println(result); // 输出4,符合预期
}

逻辑说明

  1. 递归终止:当起始索引s加上3超过字符串长度时,返回0,因为剩下的字符不足以组成"aaa"。
  2. 当前层判断:检查s到s+3的子串是否为目标值,是则当前计数+1。
  3. 递归累加:调用s+1位置的递归函数,把后续的计数结果加到当前count,最终返回累计的总次数。

输入"aaaaaa"时,会依次匹配索引0-2、1-3、2-4、3-5这4个符合条件的子串,最终返回正确结果4。

内容的提问来源于stack exchange,提问作者user_program

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:16:10