2014-03-13 75 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。 –