编写一个递归方法,返回传递的字符串中出现的'A'数

时间:2013-12-04 18:38:28

标签: java string recursion

所以我在过去的一小时里一直在摆弄这个问题。我一直遇到意外的类型错误。它似乎来自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;
    }
}

3 个答案:

答案 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 参数。

  

关于什么可以解决这个问题的任何想法?

  1. 您的功能不是递归。使用操作/更新参数递归函数调用本身。
  2. 作为递归函数中的拇指规则,始终要考虑操作函数参数。
  3. 始终有一个基本案例,它将终止递归调用。

答案 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 */

我现在意识到这个问题与学校有关,但至少这个片段可以作为理解递归的练习。