Java - Nome inicia com Vogal ou Consoante

public static void main(String[] args){

    Scanner reader = new Scanner(System.in);
    System.out.println("Digite o Nome ");
    String N=reader.next();
    char c=N.charAt(0);
    //N=read.nextLine();

    System.out.println(N);

    switch(c){

        case'a':
        case'e':
        case'i':
        case'o':
        case'u':

            System.out.println("a letra "+N+" é uma vogal");
            break;
        default:
            System.out.println("a letra "+N+" é uma consoante");
    }
}

Comecei na programação a pouco tempo e não to sabendo como o sistema verificar se o nome digitado pelo usuário começa com Vogal ou Consoante ex: Marcello>>>> Começa com consoante

Qual é a dúvida?
Já estás a ler um nome, estás a obter a primeira letra e estás a ver se é vogal e imprimir uma mensagem se for e outra se não for…
Apenas duas notas:

  • 'a' e 'A' são duas letras diferentes. Se colocares Ana ou Eva, o teu código vai dizer que começa com consoante
  • Estás a mostrar uma frase que começa com “a letra” mas estás a colocar lá o nome (N) e não a letra (c).

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.