[英]Java Recursion - counting Characters in a string
我正在尝试使用递归在“ str”中找到“字符”的出现次数。 我想我有做什么的概念,但是由于某种原因,当我测试它时代码不起作用...你知道为什么它是错误的吗?
public static int countChar(String str, String character) {
int number = 0;
if(str.length()==1) {
return number;
}
if (!(str.substring(0,1).equals(character))) {
return countChar(str.substring(1), character);
} else {
number = number + 1;
return countChar(str.substring(1), character);
}
}
数字是局部变量..
public static int countChar(String str, String character) {
if(str.length()==0) {
return 0;
}
if ((str.substring(0,1).equals(character))) {
return 1 + countChar(str.substring(1), character);
}
return countChar(str.substring(1), character);
}
终止情况是字符串长度为零。
对于每个步骤,请检查当前char,如果匹配,则在字符串的其余部分的结果中加1,如果未返回,则返回字符串的其余部分的匹配结果
在else
情况下, number
递增后将被忽略。 但这不是必需的。 只需在递归调用返回的内容中添加一个即可。
} else {
return 1 + countChar(str.substring(1), character);
}
另外,您的基本情况应该是字符串为空, length
为0
返回0
。
一些东西:
基本情况可能应该是str.length() == 0
,而不是str.length() == 1
。 尽管没有正确或错误的基本情况,但在这里为空字符串获取正确的行为比较容易。 您在长度为1的字符串的基本情况下的行为实际上是错误的。 如果长度为1的字符串包含字符怎么办? 那你就错过了。
您的第一个条件if
良好; 如果与第一个字符不匹配, countChar
的结果应用于字符串的其余部分。
你的第二个if
不是很正确; 您想返回1加上countChar
结果应用于字符串的其余部分。
似乎您有一个误解,使这种情况变得比原本要难得多:在编写代码的方式中,您认为number
在递归调用中保留了其价值。 事实并非如此; 每次你进入一个新的递归调用的时候,价值number
重置为0 number
是本地的功能,这意味着每个递归调用都有自己的副本,一起玩。 如果您希望递归调用获得这样的值,则需要像使用子字符串那样将其作为参数传递。
rgettman指定的代码:
public static int countChar(String str, String character) {
if(str.length() == 0) {
return 0;
}
if (!(str.substring(0,1).equals(character))) {
return countChar(str.substring(1), character);
} else {
return 1 + countChar(str.substring(1), character);
}
}
首要的
整数= 0;
每次通话均将号码初始化为0。 将其设为全局或在每次调用中将值作为参数传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.