Ошибка исключения метода подсчета символов?

Я скопировал этот код из хорошего ответа на этом веб-сайте (подсчет символов в строке и возврат счета) и немного изменил его в соответствии со своими потребностями. Тем не менее, я, кажется, получаю ошибку исключения в моем методе.

Я был бы признателен за любую помощь здесь.

Пожалуйста, простите любые ошибки в моем коде, так как я все еще изучаю 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)

person PrimalScientist    schedule 04.05.2013    source источник
comment
Что за исключение?   -  person Makoto    schedule 04.05.2013
comment
Я предполагаю, что вы не перекомпилировали свой проект Eclipse. Сделай так.   -  person Makoto    schedule 04.05.2013
comment
Что именно это значит? Я никогда не видел его раньше? Ааа, получится...   -  person PrimalScientist    schedule 04.05.2013


Ответы (3)


В вашем методе public static int count(String s, int countR) отсутствует оператор возврата. В настоящее время он не возвращает int, если 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;

    }

}
person Matthias Herlitzius    schedule 04.05.2013
comment
Ах, понял. Мое возвращение было не в том месте. Хорошее место и спасибо =] На самом деле, я изменил, где возвращается countR, и он удалил ошибки, однако он возвращает 0? - person PrimalScientist; 04.05.2013
comment
Это потому, что ваше условие if(s.charAt(i) == r) никогда не бывает истинным. - person Matthias Herlitzius; 04.05.2013
comment
Я вижу сейчас. Спасибо за помощь. Теперь он работает нормально. - person PrimalScientist; 04.05.2013

2 вопроса:

  1. Ваш метод подсчета при сравнении s.charAt(i) сравнивает каждую букву в слове s с созданной вами переменной r, которую вы установили равной 0. Это означает, что технически ваш метод подсчитывает, сколько раз число 0 встречается в вашем предложении. Вот почему вы получаете 0. Чтобы исправить это, удалите переменную r и в своем сравнении сделайте s.charAt(i) == 'r' в качестве сравнения. Обратите внимание на апостроф вокруг r Rio, означающий, что вы конкретно указываете на символ r.

  2. Ваш метод count не возвращается должным образом в случаях, когда строка не имеет значения, что означает, что она будет иметь нулевую длину, что означает, что цикл for не запущен, и ваш метод пропустит это, а также оператор возврата, который у вас есть. там. Чтобы решить эту проблему, переместите оператор return в самый низ метода, чтобы независимо от того, какую строку вы вводите, оператор return всегда возвращал значение (как и должно быть, потому что ваш метод ожидает, что будет возвращено целое число)

person micnguyen    schedule 04.05.2013
comment
Вы помогли решить мою проблему. Работает и спасибо. - person PrimalScientist; 04.05.2013
comment
Не беспокойся. Если бы вы могли проголосовать за этот ответ и выбрать его в качестве ответа, это было бы здорово :) - person micnguyen; 04.05.2013

Почему вы не можете использовать 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;

    }

}
person Bill    schedule 04.05.2013
comment
Кажется, что цель состоит в том, чтобы подсчитать количество вхождений определенного символа (выглядит как количество «r») в строке, а не общую длину строки. - person ajp15243; 04.05.2013
comment
Это правильно. Подсчитайте, сколько раз символ «r» используется в String s. - person PrimalScientist; 04.05.2013
comment
обновил код для этого. - person Bill; 04.05.2013