2015-07-30 4 views
1

У меня возникли проблемы с записью метода, который берет строку и подсчитывает количество раз, когда появляется первый символ (или действительно любой символ). Код, который я написал ниже, но по какой-то причине продолжает возвращать половину правильного счета, когда я его запускаю. Любая помощь будет оценена, спасибо.Подсчет символов в строке - Java

public static void countOccurrences(String string1) { 
    int counter = 0; 
    char toCheck = string1.charAt(0); 
    char compareChar; 
    for (int i = 0; i < string1.length(); i++) { 
     compareChar = string1.charAt(i); 
     if (toCheck == compareChar) { 
      counter++; 
     } 
     i++; 
    } 
    System.out.println(toCheck + " appears " + counter + " times in string1."); 
} 
+0

Спасибо всем вам помочь. Я полностью разнесся на i в заголовке цикла for, уже увеличивая переменную (новую для этого), и это делает полный смысл! –

ответ

3

Вы приращением i дважды в каждой итерации, так что вы пропускаете половину символов:

for (int i = 0; i < string1.length(); i++) { // i is incremented here 

    compareChar = string1.charAt(i); 
    if (toCheck == compareChar){ 
     counter++ ; 
    } 
    i++ ; // i is incremented again here - remove this line 

} 
0

Ваша непосредственная проблема состоит в том, что i++; происходит дважды в итерации.

Альтернативный подход заключается в использовании

s.length() - s.replace("x", "").length()

, который дает вам количество раз "x" появляется в s. Возможно, это не самый эффективный способ, но это понятно.

0

я ++ в течение цикла приращением значения я 1, нет необходимости увеличивать внутри проверки й ELOOP

Working of For loop here

public static void countOccurrences(String string1) { 

    int counter = 0; 

    char toCheck = string1.charAt(0); 

    char compareChar; 

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

     compareChar = string1.charAt(i); 
     if (toCheck == compareChar){ 
      counter++ ; 
     } 
    } 
    System.out.println(toCheck + " appears " + counter + " times in string1."); 
} 
Смежные вопросы