Médio Java
Contar vogais e consoantes
Enunciado
Leia uma frase e conte quantas vogais e quantas consoantes ela possui, ignorando espaços e caracteres não alfabéticos. Considere apenas letras de A a Z (maiúsculas ou minúsculas).
Requisitos
- Ler uma linha com
Scanner. - Contar vogais (a, e, i, o, u) e consoantes separadamente.
- Ignorar espaços, números e pontuação.
- Imprimir os dois totais.
Código inicial
import java.util.Scanner;
public class ContaVogaisConsoantes {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String frase = sc.nextLine();
// Seu código aqui
}
}
Saída esperada
Vogais: 6
Consoantes: 8
Ver dica
Converta a frase para minúsculas e verifique se cada caractere está entre 'a' e 'z'. Use charAt() em um laço.
Mostrar solução
import java.util.Scanner;
public class ContaVogaisConsoantes {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String frase = sc.nextLine().toLowerCase(); // facilita a comparação
int vogais = 0;
int consoantes = 0;
for (int i = 0; i < frase.length(); i++) {
char c = frase.charAt(i);
// Verifica se é letra
if (c >= 'a' && c <= 'z') {
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
vogais++;
} else {
consoantes++;
}
}
}
System.out.println("Vogais: " + vogais);
System.out.println("Consoantes: " + consoantes);
}
}
Passo a passo
- Lemos a frase e aplicamos
toLowerCase()para tratar maiúsculas e minúsculas igualmente. - Inicializamos dois contadores:
vogaiseconsoantes. - Percorremos cada índice da string com um
for. charAt(i)obtém o caractere na posiçãoi.- Verificamos se o caractere está entre
'a'e'z'; se não estiver, ignoramos (espaços, pontuação, números). - Se for letra, checamos se é vogal; caso contrário, incrementamos consoantes.
- Imprimimos os totais.
Por que funciona
String é imutável, então toLowerCase() retorna uma nova string sem alterar a original. Usando charAt() e comparações de char, evitamos criar objetos desnecessários. O teste c >= 'a' && c <= 'z' filtra apenas letras.
Erros comuns
- Esquecer de converter para minúsculas: maiúsculas não seriam contadas. Solução:
toLowerCase(). - Usar
==para compararchar: paracharprimitivo,==funciona, mas paraStringnão. Aqui usamoschar, então==é correto. - Contar espaços como consoantes: é preciso verificar se é letra antes de classificar.
- Usar
substringem vez decharAt: mais custoso e desnecessário.
Outra forma de resolver
Usar for (char c : frase.toCharArray()), que evita chamadas repetidas a charAt:
for (char c : frase.toCharArray()) {
if (c >= 'a' && c <= 'z') { ... }
}
Essa forma é mais legível, mas cria um array extra.
Saída esperada
Vogais: 6
Consoantes: 8