请帮忙 - 在java中计算字符串

时间:2013-10-11 22:28:31

标签: java

嗨,我是编程/ 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;
        }
    }

}

3 个答案:

答案 0 :(得分:4)

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

统计他们:

  1. 未初始化的结果变量。
  2. 字符串方法调用错误。
  3. 字符串索引将放在的循环外。
  4. 循环边界错误。
  5. 参数/要求采用文字
  6. 邻接逻辑错误。
  7. 在循环结束前返回。
  8. 就个人而言,我会在没有错误的单行代码中安装一个..还可能还有一个用于方法/或类声明。

答案 1 :(得分: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;
    }

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

现在我看一下你的函数参数(char ch),我想你正在寻找字符串s中的字符而不是“ch”中的字符,就像在“chihuaha”中一样。

如果是这样,那么你的函数可以通过以下方式找到字符串中的任何字符:

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

答案 2 :(得分:-1)

int count是一个局部变量,因此必须在使用前进行初始化。将它设置为零,你应该全部设置。