O seu código só verifica vogais minúsculas, como já foi dito na mensagem anterior. Então você tem que considerar as maiúsculas também.
Outro detalhe é que o usuário pode digitar qualquer coisa, então se for digitado algo como “123”, seu código diz que começa com consoante (pois a sua lógica é: “se não for vogal, eu digo que é consoante”). Mas na verdade você precisa verificar também se é uma letra, para depois decidir se é vogal ou consoante.
O jeito “burro” mais trabalhoso é colocar todas as opções no switch
:
Scanner reader = new Scanner(System.in);
System.out.println("Digite o Nome ");
String nome = reader.next();
char c = nome.charAt(0);
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
// começa com vogal
break;
case 'b':
case 'c':
... etc (coloca todas as consoantes, maiúsculas e minúsculas)
// começa com consoante
break;
default:
// não é vogal nem consoante
}
Um jeito mais simples, para não ter vários case
's no switch
, é:
- converte o caractere para minúsculo
- se for letra, eu faço o
switch
(senão, eu já sei que não é uma letra)
Assim:
Scanner reader = new Scanner(System.in);
System.out.println("Digite o Nome ");
String nome = reader.next();
char c = Character.toLowerCase(nome.charAt(0)); // converte o primeiro caractere para minúsculo
if ('a' <= c && c <= 'z') { // vejo se é letra
// aqui dentro do if, com certeza é uma letra de "a" a "z"
switch (c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.printf("'%s' começa com vogal", nome);
break;
// como aqui eu sei que "c" é uma letra, então se não for vogal, com certeza é consoante
default:
System.out.printf("'%s' começa com consoante", nome);
break;
}
} else { // se cair no else, é porque não é uma letra de "a" a "z"
System.out.printf("'%s' não começa com vogal nem consoante", nome);
}
Ou seja, primeiro eu vejo se é uma letra de “a” a “z”. Se não for, eu já sei que não é vogal nem consoante. E se for, eu verifico se é vogal (e se não for, com certeza é consoante).
Vale lembrar que esse código não considera letras acentuadas (“Ágata” começa com vogal, mas o Á
é um caractere diferente do A
e o código acima dirá que não começa com vogal nem consoante). Aí já é um tópico um pouco mais avançado, mas uma alternativa é usar java.text.Normalizer
:
String nome = // ler o nome
char c = Character.toLowerCase(Normalizer.normalize(nome, Normalizer.Form.NFD).charAt(0));
... // restante do código é igual
De forma bem resumida, ao normalizar a String
para a forma NFD, o caractere Á
é “quebrado”/decomposto em dois caracteres: a letra “A” (sem acento) e o “´” (o próprio acento). Assim, o primeiro caractere pode ser tratado com o código anterior. Para entender melhor como funciona a normalização, sugiro ler aqui, aqui e aqui.