2014-03-13 48 views
1

嗨我必須創建一個方法,接受單詞消息,並計數字符e出現這是我有,但我總是得到0.任何建議?計數字符'e'

public class run 
{ 
    public static void main(String[] args) 
    { 


    String message ="message"; 


    int count=0; 
    for(int i=0; i>=message.length()-1;i++) 
    { 

    char ch = message.charAt(i); 
    char e='e'; 
    if(ch == e) 
    { 
    count = count +1; 

    } 

    } 

    System.out.println(count); 



} 

} 
+2

'i> = message.length() - 1'是0比這更大嗎? –

+0

將'> ='更改爲'<='。 –

+1

如果你感覺厚顏無恥:'count = message.replaceAll(「[^ e]」,「」).length()' – user2864740

回答

4
for(int i=0; i>=message.length()-1;i++) 

這不會進入循環(除了一些短信邊緣情況下,它會再留在循環相當長的一段時間),因爲你周圍有走錯路的比較意義。您需要:

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

而且你並不真的需要這些額外的變數,這將做精:

int count = 0; 
for (int i = 0; i < message.length(); i++) 
    if (message.charAt(i) == 'e') 
     count++; 
+0

哦,謝謝!我不知道爲什麼我看不到它! – user2872194

-1

繼承人遞歸解決方案:

public static int countChar (String message, char e) 
{ 
    int charOccurences = 0; 

    for (int i = 0 ; i < message.length() ; i++) 
    { 
     if (message.charAt (i) == e) 
     { 
      charOccurences++; 
      message = message.substring (0, i) + message.substring (i + 1); 
      return charOccurences + countChar (message, e); 
     } 

    } 
    return charOccurences; 
} 
+0

爲什麼我會爲所有事情付出低沉的代價?我試圖幫助。有多種方法可以解決這個問題......我只是提供另一個。爲什麼這是值得降價的? – Noob

+0

如果這不是使用循環和遞歸邏輯的混合,它可能是值得的。 –

+0

不要哭Noob。解決你的問題(記住我們都還在學習),並且downvote可能會消失。 –

0

這裏是另一個遞歸方法:

public int countE(String str) { 

    int count = 0; 

    if (str.charAt(0) == 'e') 
     count++; 

    if (str.length() > 1) { 
     count += countE (str.substring(1)); 
    } 

    return count; 
} 
+0

@ambigram_maker感謝您的編輯。 –

+0

當你傳入一個包含大量'e'字符的字符串時,你認爲在棧幀方面會發生什麼?我編寫的一個測試程序使用了4096個e字符串,但是將其提升到8192,我們在主線程「java.lang.StackOverflowError」中看到'Exception in thread'。遞歸是這個工作的_wrong_工具。 – paxdiablo

+0

@paxdiablo實際上'e's的數量沒有關係,它將是消息的長度。我同意我不會爲這個問題親自使用遞歸,而且我會避免解析帶有數千個「e」的String。 –