所以我在过去的一小时里一直在摆弄这个问题。我一直遇到意外的类型错误。它似乎来自charAt和s.length之间的冲突。关于什么可以解决这个问题的任何想法?
class lab7
{
public static void main(String[] args)
{
String s = ("BCA");
}
public static String recursion(String s)
{
if (s.length()>=0)
{
if(s.charAt(s.length()) = A)
{
count++;
}
s.substring(0, s.length()-1);
}
return count;
}
}
答案 0 :(得分:1)
此代码存在一些问题,包括一些重要的逻辑错误。但是,你得到的具体错误可能在这里:
if(s.charAt(s.length()) = A)
首先,请注意您使用的是=而不是==,它执行赋值而不是比较。另请注意,A应该用单引号作为字符文字。现在,Java认为A是变量的名称,未定义。最后,请注意字符串是零索引的,因此在s.length()位置查找字符会给出一个边界错误。
我希望这有助于您入门!作为提示,尽管你的函数被命名为“递归”,它实际上是否使用递归?
答案 1 :(得分:1)
以下代码使用 String 类。对于性能关键型应用程序,您可能需要相应地使用 StringBuffer / StringBuilder 类。
class StringCounter
{
public static void main (String[] args)
{
int count = returnCount("ABCDABCDABCD", 0);
System.out.println(count);
}
public static int returnCount(String s, int count)
{
// You may want to do some validations here.
if(s.length()==0)
{
return count;
}
if(s.charAt(0)=='A')
{
return returnCount(s.substring(1), count+1);
}
else
{
return returnCount(s.substring(1), count);
}
}
}
代码只是将 String 参数一次切成一个字符,并检查所需的字符。进一步在每个调用上,它将更新计数和 String 参数。
关于什么可以解决这个问题的任何想法?
答案 2 :(得分:1)
请考虑以下代码段:
static int countA(String str) {
if (str == null || str.length() == 0) { /* nothing or "" contains 0 A's */
return 0;
}
return (str.charAt(0) == 'A' ? 1 : 0 ) /* 0 or 1 A's in first character */
+ countA(str.substring(1)); /* plus no. of A's in the rest */
}
你可以这样调用这个函数:
int a = countA("ABAABA"); /* a is 4 */
我现在意识到这个问题与学校有关,但至少这个片段可以作为理解递归的练习。