0

我已经从这个网站上的一个很好的答案中复制了这段代码(计算字符串中的字符并返回计数)并稍微修改它以满足我自己的需要。但是,我的方法似乎出现异常错误。

我会很感激这里的任何帮助。

请原谅我的代码中的任何错误,因为我仍在学习 Java。

这是我的代码:

public class CountTheChars {

public static void main(String[] args){

    String s = "Brother drinks brandy.";

    int countR = 0;

    System.out.println(count(s, countR));

}


public static int count(String s, int countR){

    char r = 0;

    for(int i = 0; i<s.length(); i++){

        if(s.charAt(i) == r){

            countR++;

        }

        return countR;

    }

}

}

这是一个例外:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method count(String) in the type CountTheChars is not applicable for the arguments (int)

at CountTheChars.main(CountTheChars.java:12)
4

3 回答 3

1

您的方法中缺少 return 语句public static int count(String s, int countR)。目前它不返回intif s.length() == 0

这应该按预期工作:

public class CountTheChars {

    public static void main(String[] args) {

        String s = "Brother drinks brandy.";

        int countR = 0;

        System.out.println(count(s, countR));

    }

    public static int count(String s, int countR) {

        for (int i = 0; i < s.length(); i++) {

            if (s.charAt(i) == 'r') {

                countR++;

            }

        }

        return countR;

    }

}
于 2013-05-04T16:27:51.360 回答
1

2个问题:

  1. 比较 s.charAt(i) 时的计数方法是将单词 s 中的每个字母与您设置为 0 的名为 r 的变量进行比较。这意味着,从技术上讲,您的方法是计算数字的次数0出现在你的句子中。这就是你得到 0 的原因。要解决这个问题,请删除你的 r 变量并在你的比较中,将 s.charAt(i) == 'r' 作为比较。请注意 r Rio 周围的撇号表示您专门指的是字符 r。

  2. 对于字符串为空的情况,您的 count 方法没有正确返回,这意味着它的长度为零,这意味着您的 for 循环未运行,您的方法将跳过该字符串以及您在其中的 return 语句。要解决此问题,请将 return 语句移到方法的最底部,因此无论您输入什么字符串,return 语句都将始终返回(因为您的方法期望返回一个 int)

于 2013-05-04T16:41:28.477 回答
0

为什么你不能s.length()用来计算字符数(即字符串的长度)String s

编辑:更改为合并“计数的出现次数char r”。您将函数称为count(s,countR, r)并声明char r = 'a'或任何char您想要的main

public static int count(String s, int countR, char r){

    countR= 0;
    for(int i = 0; i<s.length(); i++){

        if(s.charAt(i) == r){

            countR++;

        }

        return countR;

    }

}
于 2013-05-04T16:37:02.667 回答