Ravnus
Novembro 11, 2011, 2:57pm
#1
Pessoal, nunca pensei que eu fosse fazer um post desses, mas aqui estou eu. Um professor passou um exercício na faculdade e eu não sei como fazer. Vou postar o enunciado:
“Faça um programa que armazene uma frase e mostre a quantidade de cada vogal contida na mesma,
além do total geral de vogais. Considere as vogais sem distinção entre maiúsculo e minúsculo. O retorno
para o usuário deverá apresentar a quantidade de cada vogal, o total das vogais e o tamanho da frase
informada pelo usuário”
O que acontece, eu não sei manipular caracteres com Java, nunca precisei disso antes. No C, eu criaria um vetor de caracteres ou um ponteiro e mandava ver, mas e no Java, como eu faço?
Eu andei procurando uma classe chamada char, mas não consegui entender se ela faz o que eu quero.
Não estou pedindo para que resolvam para mim, só quero saber o que usar e como usar.
Abraço.
Mais ou menos assim:
String texto = “Algum texto”;
char [] chars = texto.toCharArray();
Ai pra frente é igual a C, da um loop pelos caracteres verificando se é vogal e soma em uma variável.
Uma dica: a Classe Caracter tem os métodos estáticos toUpperCase e toLowerCase que pode te ajudar um pouco.
Ravnus
Novembro 11, 2011, 5:14pm
#3
[quote=lsjunior]Mais ou menos assim:
String texto = “Algum texto”;
char [] chars = texto.toCharArray();
Ai pra frente é igual a C, da um loop pelos caracteres verificando se é vogal e soma em uma variável.
Uma dica: a Classe Caracter tem os métodos estáticos toUpperCase e toLowerCase que pode te ajudar um pouco.[/quote]
Obrigado, amigo. Agora tudo bem, como eu disse, eu nunca tinha feito isso em Java, daí o professor me pegou de surpresa.
Quando eu terminar, posto o código aqui. Eu vou fazer tudo dentro da classe Principal mesmo.
Abraço.
Ravnus
Novembro 11, 2011, 8:23pm
#4
Trabalho pronto. Por enquanto só vou fazer isso, depois tento resolver outras coisas.
/* **********************************************************************************
* Informações sobre o programa: *
* *
* O programa não está lendo frases inteiras, somente palavras. Corrigir isso. *
* O programa não trata vogais acentuadas, verificar se é preciso fazer isso ou não.*
* *
* **********************************************************************************/
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
String frase;
char vetorFrase[];
Scanner lerFrase = new Scanner(System.in);
int qtdeA = 0,
qtdeE = 0,
qtdeI = 0,
qtdeO = 0,
qtdeU = 0,
somaVogais =0;
System.out.println("Digite uma frase, sem incluir acentos:");
frase = lerFrase.next();
vetorFrase = frase.toCharArray();
for(int i = 0; i < vetorFrase.length; i++) {
if(vetorFrase[i] == 'a' || vetorFrase[i] == 'A')
qtdeA++;
else if(vetorFrase[i] == 'e' || vetorFrase[i] == 'E')
qtdeE++;
else if(vetorFrase[i] == 'i' || vetorFrase[i] == 'I')
qtdeI++;
else if(vetorFrase[i] == 'o' || vetorFrase[i] == 'O')
qtdeO++;
else if(vetorFrase[i] == 'u' || vetorFrase[i] == 'U')
qtdeI++;
}
somaVogais = qtdeA + qtdeE + qtdeI + qtdeO + qtdeU;
System.out.println("Quantidade de a-A = " + qtdeA
+ "\nQuantidade de e-E = " + qtdeE
+ "\nQuantidade de i-I = " + qtdeI
+ "\nQuantidade de o-O = " + qtdeO
+ "\nQuantidade de u-U = " + qtdeU
+ "\nQuantidade total de vogais = " + somaVogais);
}
}
Só uma questão de estilo.
Essa “escada” não deveria existir. Formate assim o seu bloco de if, else ifs e else:
if(vetorFrase[i] == 'a' || vetorFrase[i] == 'A')
qtdeA++;
else if(vetorFrase[i] == 'e' || vetorFrase[i] == 'E')
qtdeE++;
else if(vetorFrase[i] == 'i' || vetorFrase[i] == 'I')
qtdeI++;
else if(vetorFrase[i] == 'o' || vetorFrase[i] == 'O')
qtdeO++;
else if(vetorFrase[i] == 'u' || vetorFrase[i] == 'U')
qtdeI++;
Ah, e para ler uma linha inteira (o que você chamou de frase) use o método nextLine de Scaner.
[]'s
Ravnus
Novembro 12, 2011, 8:00am
#6
[quote=davidbuzatto]Só uma questão de estilo.
Essa “escada” não deveria existir. Formate assim o seu bloco de if, else ifs e else:
[/quote]
Também acho feia essa escada, mas me ensinaram desse jeito, por isso eu mati a idéia. Vou corrigir daqui pra frente. Inclusive o eclipse corrige o else pra baixo do if e eu sempre achei que fosse teimosia.
[quote]
Ah, e para ler uma linha inteira (o que você chamou de frase) use o método nextLine de Scaner.
[]'s[/quote]
Obrigado pela dica, vou corrigir.
==================================================================
Editando: Postando o código com as alterações sugeridas:
/* **********************************************************************************
* Informações sobre o programa: *
* *
* Data: 11/11/2011 *
* *
* O programa não está lendo frases inteiras, somente palavras. Corrigir isso. *
* O programa não trata vogais acentuadas, verificar se é preciso fazer isso ou não.*
* *
* Data: 12/11/2011 *
* *
* Problema de não ler frases inteiras resolvido. *
* Estilo do if-else modificado, retirado a "escada" *
* **********************************************************************************/
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
String frase;
char vetorFrase[];
Scanner lerFrase = new Scanner(System.in);
int qtdeA = 0,
qtdeE = 0,
qtdeI = 0,
qtdeO = 0,
qtdeU = 0,
somaVogais =0;
System.out.println("Digite uma frase, sem incluir acentos:");
frase = lerFrase.nextLine(); //Corrigido de lerFrase.next() para lerFrase.nextLine().
vetorFrase = frase.toCharArray();
for(int i = 0; i < vetorFrase.length; i++) {
if(vetorFrase[i] == 'a' || vetorFrase[i] == 'A')
qtdeA++;
else if(vetorFrase[i] == 'e' || vetorFrase[i] == 'E')
qtdeE++;
else if(vetorFrase[i] == 'i' || vetorFrase[i] == 'I')
qtdeI++;
else if(vetorFrase[i] == 'o' || vetorFrase[i] == 'O')
qtdeO++;
else if(vetorFrase[i] == 'u' || vetorFrase[i] == 'U')
qtdeI++;
}
somaVogais = qtdeA + qtdeE + qtdeI + qtdeO + qtdeU;
System.out.println("Quantidade de a-A = " + qtdeA
+ "\nQuantidade de e-E = " + qtdeE
+ "\nQuantidade de i-I = " + qtdeI
+ "\nQuantidade de o-O = " + qtdeO
+ "\nQuantidade de u-U = " + qtdeU
+ "\nQuantidade total de vogais = " + somaVogais);
}
}
Aproveitando seu código,como vc mostraria cada letra digitada ao invés da soma dela ?
Ravnus
Setembro 17, 2012, 2:52pm
#8
for(int i = 0; i < vetorFrase.length; i++) {
System.out.print(vetorFrase[i]);
}
Luizao
Setembro 17, 2012, 7:40pm
#9
Dica: contar quantas letras “a” possui uma string:
String frase = "frase bem longa";
int qtde = frase.split("a").length - 1;
System.out.println("Frase tem " + qtde + " 'a'");
O split vai quebrar a string em vários arrays, aí basta contar quantos arrays foram retornados ;).
Luizao
Setembro 17, 2012, 7:43pm
#10
Ah, se for contar desconsiderando maiusculas e minusculas, podemos usar uma lista na expressão regular:
int qtde = frase.split("[aA]").length - 1;
Ravnus
Setembro 18, 2012, 4:27pm
#11
[quote=Luizao]Ah, se for contar desconsiderando maiusculas e minusculas, podemos usar uma lista na expressão regular:
int qtde = frase.split("[aA]").length - 1;
[/quote]
Ah tá, o cara não entende nem sequer como pegar um caracter em um vetor e vai entender regex e o método split().
KISS
Luizao
Setembro 18, 2012, 6:29pm
#12
[quote=Ravnus][quote=Luizao]Ah, se for contar desconsiderando maiusculas e minusculas, podemos usar uma lista na expressão regular:
int qtde = frase.split("[aA]").length - 1;
[/quote]
Ah tá, o cara não entende nem sequer como pegar um caracter em um vetor e vai entender regex e o método split().
KISS[/quote]
Não disse que era mais simples ou fácil de entender, só quis ACRESCENTAR ao tópico uma outra forma de fazer.
Ravnus
Setembro 18, 2012, 8:02pm
#13
[quote=Luizao][quote=Ravnus][quote=Luizao]Ah, se for contar desconsiderando maiusculas e minusculas, podemos usar uma lista na expressão regular:
int qtde = frase.split("[aA]").length - 1;
[/quote]
Ah tá, o cara não entende nem sequer como pegar um caracter em um vetor e vai entender regex e o método split().
KISS[/quote]
Não disse que era mais simples ou fácil de entender, só quis ACRESCENTAR ao tópico uma outra forma de fazer.[/quote]
Ah, entendi. Perdão pelo meu entendimento equivocado. Eu pensei que você fosse mais um daqueles que querem mostrar como são bons em programação e não se importam se vão confundir ou não a pessoa que está com dúvida.