我必须解决一个练习,计算一个字符串中的所有大写字符 - 递归 - 无论如何我以为我可能找到了解决方案 - 但它不起作用...... 你可能会帮助我吗?谢谢!
public static int CountCapitals(String s) {
int counter = 0;
// if (Character.isUpperCase(s.charAt(0)))counter+=1;
if (s.length() == 0)
return counter;
if (s.length() == 1 && s.charAt(0) < 65 && s.charAt(0) > 90)
return 0;
if (s.charAt(0) < 'A' && s.charAt(0) > 'Z') {
return CountCapitals(s.substring(1));
}
if (s.charAt(0) >= 'A' && s.charAt(0) <= 'Z')
counter++;
return CountCapitals(s.substring(1));
}
答案 0 :(得分:2)
您的代码的问题是使用counter
:每个调用级别都有自己的counter
,最初设置为零。底部的++
运算符无效。
您需要根据上一次调用的结果计算此调用的结果。你的基本情况(即s.length() == 0
)没问题;您的其余代码需要更改,以便在第一个字母为非资本时返回任何CountCapitals(s.substring(1))
;当第一个字母为大写时,您的函数应返回1 + CountCapitals(s.substring(1))
。
答案 1 :(得分:1)
当字符串的长度为1且唯一的字符为大写时,您需要考虑这种情况(在这种情况下,您应该返回1)。
此外,您需要将计数器作为参数传递,而不是期望它“转移”到其他函数调用中。
答案 2 :(得分:0)
这种递归应该符合你的要求:
public static int countCapitals(String s) {
if (s.length() == 0) return 0;
int cap = Character.isUpperCase(s.charAt(0)) ? 1 : 0;
return countCapitals(s.substring(1)) + cap;
}
如果这不是家庭作业,你可以尝试一种快速约5-10倍的迭代方法:
public static int countCapitals(String s) {
int count = 0;
for (int idx = 0; idx < s.length(); idx++) {
if (Character.isUpperCase(s.charAt(idx))) {
count++;
}
}
return count;
}
答案 3 :(得分:0)
您实际上不需要使用counter
变量来跟踪大写字母的数量。相反,你可以只通过递归调用来跟踪总数:
public static int CountCapitals(String s)
{
if (s.length() == 1)
return (Character.isUpperCase(s.charAt(0)) ? 1 : 0);
else
return CountCapitals(s.substring(1)) +
(Character.isUpperCase(s.charAt(0)) ? 1 : 0);
}
如果这是一个作业,你必须使用ASCII值,那么很好,但如果没有,你真的应该Character.isUpperCase(char c)
。如果您不熟悉条件运算符,则定义如下:
if(someExpression == true)
{
//output 1
}
else
{
//output 0
}
简洁地表示为:
(someExpression == true) ? 1 : 0
NB:
在您的示例中,counter
在每个方法调用开始时设置为0,这就是为什么它不起作用。如果确实想要使用counter
,请将其作为参数传递给方法,并使用每个方法调用更新参数。当你到达String
的末尾时,只需返回参数即可。
答案 4 :(得分:-1)
您尝试这个
公共类HelloWorld {
public static int isUpperCase(String str){
if(str.length()==0) return 0;
boolean check =Character.isUpperCase(str.charAt(0));
if(check){
return isUpperCase(str.substring(1))+1;
}
return isUpperCase(str.substring(1));
}
public static void main(String []args){
String n= "FSAsdsadASdcCa";
System.out.println(isUpperCase("FSAsdsadASdcCa"));
}
}