2013-05-04 2 views
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) 
+1

Какое исключение? – Makoto

+0

Я добавил выше. – PrimalScientist

+1

Я предполагаю, что вы не перекомпилировали проект Eclipse. Сделай так. – Makoto

ответ

1

Вы пропускаете оператор возврата в методе 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; 

    } 

} 
+0

Ах, понял. Мое возвращение было не в том месте. Хорошее место и спасибо =] На самом деле, я внесла поправки, где обратный счетR и он удалил ошибки, однако он возвращает 0? – PrimalScientist

+2

Это потому, что ваше условие 'if (s.charAt (i) == r)' никогда не является истинным. –

+0

Теперь я вижу. Спасибо за помощь. Сейчас он работает нормально. – PrimalScientist

0

Почему вы не можете использовать s.length() для подсчета количества символов (т.е. длина строки) в String s?

EDIT: изменено, чтобы включить "количество отсчетов 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; 

    } 

} 
+1

Цель состоит в том, чтобы подсчитать вхождения определенного символа (похожее на число «r») в String, а не на общую длину String. – ajp15243

+0

Это правильно. Подсчитайте, сколько раз символ 'r' используется в String s. – PrimalScientist

+0

обновил код для этого. – Bill

1

2 вопроса:

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

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

+0

Вы помогли решить мою проблему. Он работает и благодарит. – PrimalScientist

+0

Не беспокойтесь. Если бы вы могли поддержать этот ответ и выбрать его в качестве ответа, это было бы здорово :) – micnguyen