繁体   English   中英

Java递归-计算字符串中的字符

[英]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);
}

另外,您的基本情况应该是字符串为空, length0返回0

一些东西:

  1. 基本情况可能应该是str.length() == 0 ,而不是str.length() == 1 尽管没有正确或错误的基本情况,但在这里为空字符串获取正确的行为比较容易。 您在长度为1的字符串的基本情况下的行为实际上是错误的。 如果长度为1的字符串包含字符怎么办? 那你就错过了。

  2. 您的第一个条件if良好; 如果与第一个字符不匹配, countChar的结果应用于字符串的其余部分。

  3. 你的第二个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM