Привет, мне нужно создать метод, который принимает слово message, и подсчитывает, сколько раз символ e появляется, это то, что у меня есть, но я всегда получаю 0. любые предложения?
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);
}
}
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++;
Вот еще один рекурсивный метод:
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;
}
e
, что, по вашему мнению, произойдет с точки зрения стековых фреймов? Тестовая программа, которую я написал, работает со строкой 4096 е, но при увеличении до 8192 мы видим Exception in thread "main" java.lang.StackOverflowError
. Рекурсия - неподходящий инструмент для этой работы.
Это рекурсивное решение:
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;
}