[RESOLVIDO] Dificuldade com loop for

Bom dia pessoal!

Seguinte, estou resolvendo um exercício da aula, e tenho que fazer o que se segue: Passar uma frase e uma palavra como parâmetros para um método que vai varrer a frase e informar quantas vezes a palavra informada aparece na frase.

Fiz um for para varrer a frase, mas estou com dificuldade para assim que encontrar uma letra que seja correspondente à primeira letra da palavra, verificar se as próximas letras coincidem com as letras restantes da palavra.

Já experimentei algumas lógicas diferentes, mas não consegui alcançar resultado. Como eu consigo encaixar uma rotina dentro desse for, onde ao encontrar a primeira letra da palavra, eu consiga iniciar a verificação das posteriores?

OBS: Preciso fazer isso na mão, sem ajuda de métodos prontos…

Obrigado!

É bem difícil te ajudar sem dar respostas, então vou jogar no ar algumas idéias. Primeiro, você já separou as palavras da frase? Já consegue percorrer essas palavras uma a uma? Pensando bem, depois disso, percorrer as letras de uma palavra pode ser parecido com percorrer as palavras de uma frase. Você pode tentar um for dentro de outro, ou criar uma função só para percorrer uma palavra e chamar ela de dentro do primeiro for.

Por que vc não lê cada palavra da frase e apenas compara com a palavra passada? Por que tem q ser a primeira letra e depois ler uma por uma para comparar?
Se isso foi solicitado no exercício vc terá q seguir a idéia do jcranky, usar um for dentro de outro. Posta o q vc já tem d código p/ facilitar a ajuda.

Olá cara… o que os amigos já falaram acho que já te da um grande passo…

Se você já consegue “ler” as palavras é só colocar elas em alguma variável por exemplo, e usar o variável.contains(“a palavra”)… se sim faz o que quer senão faz o que não quer…

Tu falou que estás com dificuldade no For, então poste aí teu código pro pessoal olhar.

Olá pessoal.

Estive pesquisando bastante algoritmos de busca em cadeias de caracteres, afinal o que eu precisava era varrer um texto qualquer e contar as ocorrências de determinada palavra.

Encontrei muitos trabalhos acadêmicos elucidando o assunto, mas muito genéricos e pouco didáticos. Isso até me deu idéia pra com auxílio de um professor, escrever um artigo científico com exemplos práticos pra elucidar de uma vez por todas esse conceito.

Após vários testes de mesa consegui fazer o código abaixo:

//parametros de entrada: frase e palavras informadas pelo usuário. public static void questao03(String frase, String palavra) { //A cada ocorrencia da palavra na frase, este contador incrementa +1. int contadorPalavra = 0; //Auxiliar para iterar sobre cada letra da palavra informada. int aux= 0; //A cada letra da frase que coincide com uma letra da palavra, este contador incrementa +1. //Quando o valor deste contador ser igual ao .length da palavra, incrementa +1 na variável contadorPalavra. int contadorLetrasPalavra = 0; for (int i = 0; i < frase.length(); i++) { if (frase.charAt(i) == palavra.charAt(aux)) { contadorLetrasPalavra++; aux++; if (contadorLetrasPalavra == palavra.length()) { contadorPalavra++; aux = 0; contadorLetrasPalavra = 0; } } else { aux = 0; contadorLetrasPalavra = 0; } } if (contadorPalavra != 1) { JOptionPane.showConfirmDialog(null, "Foram encontradas "+contadorPalavra+" correspondências à palavra informada."); } else JOptionPane.showConfirmDialog(null, "Foi encontrada "+contadorPalavra+" correspondência à palavra informada."); }

Claro, existem muitos métodos prontos do Java pra fazer esse trabalho por mim, porém estou finalizando o 1º semestre e preciso fazer tudo na mão.

Por hora esse foi o método que encontrei, não é performático, mas foi o que consegui fazer num domingo de tarde chuvosa…

Minha dúvida era mais a nível de projetar do que implementar, não conseguia fazer um algorítmo pra esse problema. Programo esporadicamente em Java há quase um ano, ainda sou estagiário e não tenho muita experiência com lógica.

:smiley: