请帮助-计算java中的字符串

请帮助-计算java中的字符串,java,Java,您好,我是编程/Java的初学者,我正在尝试做一个简单的程序来计算字符串中的字符数,所以我写了以下内容,但我无法编译,有人能告诉我为什么吗 public class StringProblems { public int count(String s,char ch) { int count; int l =s.length(); char result =charAt(s); for(int n=0; n<=

您好,我是编程/Java的初学者,我正在尝试做一个简单的程序来计算字符串中的字符数,所以我写了以下内容,但我无法编译,有人能告诉我为什么吗

public class StringProblems {

     public int count(String s,char ch) {

        int count;
        int l =s.length();
        char result =charAt(s);

        for(int n=0; n<=l; n++){

            if(result=='c') {
                if(result == 'h') {
                    count ++;
                }
            }
            return count;
        }
    }

}

int count是一个局部变量,因此必须在使用前对其进行初始化。将其设置为零,您就可以全部设置。

这不是C。C通常会传递对象并对其执行操作。在Java和大多数面向对象语言中,您通常要求对象为您做一些事情。 这是通过以下语法完成的:

object.doThis(parameter1, parameter2);
这样做:

public class StringProblems {

    public int count(String s,char ch) {

        int count = 0; //initialize the variable
        int l =s.length();
        //char result =charAt(s); //don't need this. It should be **in** the loop

        for(int n=0; n < l; n++){ //changed to <. <= will give you an index out of range 
                                  //runtime error
            char result = String.charAt(n); //moved the call to here
            if(result=='c') {
                if(result == 'h') {
                    count ++;
                }
            }

        }
        return count;
    }

}
而且,这永远不会起作用,因为char只能保存一个值。它永远不会同时是c和h

类似这样的循环可以检测ch组合

    public int count(String s,char ch) {

        int count = 0;
        int l =s.length();
        //char result =charAt(s); //don't need this. It should be **in** the loop

        for(int n=0; n < l - 1; n++){
            char first = String.charAt(n); //moved the call to here

            if(first=='c') {
                char second = String.charAt(n+1); //check the character right after 'c'
                if(second == 'h') {
                    count ++;
                }
            }

        }
        return count;
    }
这是因为它只检查字符串中倒数第二个字符。如果字符串中的最后一个字符是c,则后面不能有h。如果您检查的字符中有一个是c,则在后面立即检查h。您可以通过使用for变量进行优化,并在找到ch时将其递增1,因为下一次迭代无法找到ch,但弄乱for计数器var是个坏主意

现在我通过char ch查看函数参数,我想您是在字符串s中查找字符,而不是在chihuaha中查找ch

如果是,则函数可以通过以下方法查找字符串中的任何字符:

    //counts the number of times ch appears in s
    public int count(String s,char ch) {

        int l =s.length();

        for(int n=0; n < l; n++){
            char result = String.charAt(n); //call inside the loop

            if(first==ch) {
                count ++;
            }

        }
        return count;
    }

这显然是一个bug计数测试,或者是为了解决家庭作业中的bug问题——除非你无意中用这么简单的代码编写了几乎所有可能的bug

计算它们:

未初始化的结果变量。 字符串方法调用错误。 放置在循环外部的字符串索引。 循环边界错误。 参数/需求作为文本。 邻接逻辑错误。 在循环结束之前返回。
就我个人而言,我会再装一个。。在没有错误的单行代码中:可能还有一行用于方法/或类声明。

您还没有初始化计数。给它一个初始值0。@RohitJain让我们看看有多少人会发布一个指向这个的答案来等待获得免费代表。这里有不止一件事情出错了。介意分享一下你的错误吗?我刚刚做了,但这一个是错误的-char result=charAts;根据我的编译器,这显然是一个bug计数测试,或者是修复bug问题,这是一个家伙的家庭作业。除非,无意中,他已经用这么简单的代码编写了几乎所有可能的bug……你能告诉我一件事吗。结果怎么可能等于c,然后等于h?伯爵在哪里initialized@Prateek不会的。我已经给出了一个循环,可以检查这一点。很好的一点,但是省略空白和过多的bug对于一个严肃的测试来说实在是太多了。我不想与发明这种测试的人合作。7在一个只需要5行代码的函数中出现的bug非常好: