递归统计字符串中"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,符合预期 }
逻辑说明
- 递归终止:当起始索引
s加上3超过字符串长度时,返回0,因为剩下的字符不足以组成"aaa"。 - 当前层判断:检查
s到s+3的子串是否为目标值,是则当前计数+1。 - 递归累加:调用
s+1位置的递归函数,把后续的计数结果加到当前count,最终返回累计的总次数。
输入"aaaaaa"时,会依次匹配索引0-2、1-3、2-4、3-5这4个符合条件的子串,最终返回正确结果4。
内容的提问来源于stack exchange,提问作者user_program
相关产品推荐
相关产品推荐

