-1

嗨,我是编程/Java的初学者,我正在尝试做一个简单的程序来计算字符串中的“char ch”,所以我在下面写了这个,我无法编译,谁能告诉我为什么?:

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;
        }
    }

}
4

3 回答 3

4

这显然是一个“错误计数”测试,或者是家庭作业的“修复错误”问题——除非,在不知不觉中,你已经在如此简单的代码中编写了几乎所有可能的错误......

数着他们:

  1. 未初始化的结果变量。
  2. 字符串方法调用错误。
  3. 字符串索引放置在循环之外
  4. 循环边界错误。
  5. 作为文字的参数/要求。
  6. 邻接逻辑错误。
  7. 在循环结束之前返回。

就个人而言,我会在没有错误的单行代码中再安装一个 :) 可能还有一个用于方法/或类声明。

于 2013-10-11T22:40:24.727 回答
0

这不是 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;
    }

这是有效的,因为它只检查字符串中倒数第二个字符。如果字符串中的最后一个字符是 ac,则后面不能有 h。如果您检查的字符之一是 ac,则在之后检查一个 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;
    }
于 2013-10-11T22:31:09.113 回答
-1

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

于 2013-10-11T22:30:51.463 回答