std::count_if
在这种情况下,计数应为3 ...但应为4
答案 0 :(得分:0)
递归方法内的for循环没有break语句。休息delete1(str)之后的语句;声明将起作用。
delete1(str);
break;
在使用递归时,您应该知道在哪里中断循环以及Java中的功能流如何发生。
在您的情况下,对于所有长度大于2的子字符串,将多次调用delete方法。这就是为什么输出为4的原因。
答案 1 :(得分:0)
您的代码有很多错误:
count
,并且还让您的方法返回该计数。if(str.length() > 1)
检查是多余的,因为您的循环已经在[1, length)
范围内循环,因此如果长度小于或等于1,则循环将不会开始。记住以上几点,您可以将其更改为:
class Main {
public static void main(String[] args){
String str = "AAAA"; // Expected output: 3
countChars(str);
System.out.println(count);
}
private static int count = 0;
private static void countChars(String str){
int length = str.length();
for(int i = 1; i < length; i++){
if(str.charAt(i-1) == str.charAt(i)){
count++;
String substr = str.substring(i, length);
countChars(substr);
break;
}
}
}
}
按照您的期望,将count
放在最后3个位置。
不过,我仍然不确定您要完成的工作。例如,AAAABABBAB
或ABAAAAABBABA
的预期输出是什么?另外,如果计数不是静态的类级字段,那会更好,这样可以更容易地重用。