A questão pede para criar criar um vetor de 05 caracteres , informar quantas consoantes foram lidas e imprimi las.
Criei uma variável da classe String chamada vetor[] para armazenar os caracteres e uma variável do tipo inteiro para somar a quantidade de caracteres consoantes digitados.
No entanto a variável não está fazendo a soma total de caracteres consoantes que foram digitados e estão imprimindo todos os caracteres que foram digitados .
Segue o código…`
packagelistadexercicios;importjava.util.Scanner;/* Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes. */publicclassQuestao29{publicstaticvoidmain(String[]args){String[]vetor=newString[5];Stringvetoraux;intcons=0;Scannerinput=newScanner(System.in);for(intc=0;c<vetor.length;c++){System.out.println("Informe um caractere:");vetoraux=input.next();vetor[c]=vetoraux;if((vetor[c]!="a")||(vetor[c]!="e")||(vetor[c]!="i")||(vetor[c]!="o")||(vetor[c]!="u")){cons=cons+1;}}System.out.println("A quantidade de consoantes é :"+cons);for(intc=0;c<vetor.length;c++){if((vetor[c]!="a")||(vetor[c]!="e")||(vetor[c]!="i")||(vetor[c]!="o")||(vetor[c]!="u")){System.out.println(" "+vetor[c]);}}}}Informeumcaractere:aInformeumcaractere:cInformeumcaractere:vInformeumcaractere:bInformeumcaractere:oAquantidadedeconsoantesé:5acvbo
Qualquer char será sempre diferente de aou diferente de eou diferente de i …
Tu pretendes contar os que são diferentes de ae diferentes de ee diferentes de i…
staroski
Pois é, você criou um vetor de String, não de char.
Vetor de caracteres seria assim:
char[]vetor=newchar[5];
Andre_Pires1
@staroski fiz correção, no entanto o código apresentou um erro que não estou conseguindo corrigir em relação a linha 17, como se o sistema não estivesse reconhecendo minha variável vetor[c] como variável do tipo char, a mensagem alerta que não posso converter uma variável da classe String para tipo char. Não entendi o porquê disso. Segue o erro…
packagelistadexercicios;importjava.util.Scanner;/* Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes. */publicclassQuestao29{publicstaticvoidmain(String[]args){char[]vetor=newchar[5];charvetoraux;intcons=0;Scannerinput=newScanner(System.in);for(intc=0;c<vetor.length;c++){System.out.println("Informe um caractere:");vetor[c]=input.next();// ESSE ERRO : Type mismatch: cannot convert from String to char if((vetor[c]!='a')||(vetor[c]!='e')||(vetor[c]!='i')||(vetor[c]!='o')||(vetor[c]!='u')){cons=cons+1;}}System.out.println("A quantidade de consoantes é :"+cons);for(intc=0;c<vetor.length;c++){if((vetor[c]!='a')||(vetor[c]!='e')||(vetor[c]!='i')||(vetor[c]!='o')||(vetor[c]!='u')){System.out.println(" "+vetor[c]);}}}}
staroski1 like
Sim, são tipos de dados diferentes.
O método next retorna um objeto String, você pode pegar o caractere da posição 0 com o método charAt da classe String
Andre_Pires1
Vou pesquisar esse método, obrigado.
Andre_Pires1
@staroski ficou assim mas continua dando erro. Usei o método charAt , minha dúvida é se teria que declarar minha array como caractere ou String .
packagelistadexercicios;importjava.util.Scanner;/* Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes. */publicclassQuestao29{publicstaticvoidmain(String[]args){char[]vetor=newchar[5];charvetoraux;intcons=0;Scannerinput=newScanner(System.in);for(intc=0;c<vetor.length;c++){System.out.println("Informe um caractere:");vetor[c]=input.next().charAt(c);if((vetor[c]!='a')||(vetor[c]!='e')||(vetor[c]!='i')||(vetor[c]!='o')||(vetor[c]!='u')){cons=cons+1;}}System.out.println("A quantidade de consoantes é :"+cons);}}Informeumcaractere:aInformeumcaractere:sExceptioninthread"main"java.lang.StringIndexOutOfBoundsException:Stringindexoutofrange:1atjava.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)atjava.base/java.lang.String.charAt(String.java:1515)atlistadexercicios.Questao29.main(Questao29.java:17)
Jonathan_Medeiros
Aqui você deveria pegar sempre a posição ZERO!
vetor[c]=input.next().charAt(0);
Andre_Pires1
@Jonathan_Medeiros realmente funcionou. Porém o código está parecendo carro velho porque toda hora tem algo dando erro. A variável cons do tipo inteiro que declarei para contar o número de caracteres consoantes não está obedecendo a estrutura condicional que fiz para contar apenas as consoantes…
packagelistadexercicios;importjava.util.Scanner;/* Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes. */publicclassQuestao29{publicstaticvoidmain(String[]args){char[]vetor=newchar[5];charvetoraux;intcons=0;Scannerinput=newScanner(System.in);for(intc=0;c<vetor.length;c++){System.out.println("Informe um caractere:");vetor[c]=input.next().charAt(0);if((vetor[c]!='a')||(vetor[c]!='e')||(vetor[c]!='i')||(vetor[c]!='o')||(vetor[c]!='u')){cons=cons+1;// Essa variável !!}}System.out.println("A quantidade de consoantes lidas é :"+cons);}}
Quem puder me ajudar , desde já agradeço.
Jonathan_Medeiros1 like
O problema não é a variável, a sua lógica da condicional está incorreta, inclusive já citaram este problema nas respostas anteriores!
Só um detalhe: verificar se não é vogal não garante que é consoante. Isso porque o usuário pode digitar qualquer coisa (por exemplo, 1, &, o emoji , etc), etc. Então você precisa ver se é letra e se não é vogal.
E também tem que tratar o caso de digitar letras maiúsculas. Por exemplo, convertendo para minúscula antes de do if:
char[]vetor=newchar[5];intcons=0;Scannerinput=newScanner(System.in);for(intc=0;c<vetor.length;c++){System.out.println("Informe um caractere:");vetor[c]=Character.toLowerCase(input.nextLine().charAt(0));if('a'<vetor[c]&&vetor[c]<='z'&&vetor[c]!='e'&&vetor[c]!='i'&&vetor[c]!='o'&&vetor[c]!='u'){cons++;}}System.out.println("A quantidade de consoantes é :"+cons);
O detalhe é que ao fazer 'a' < vetor[c], já estou excluindo o “a” (ou seja, não preciso testar de novo se é diferente de “a”).
Andre_Pires1
Verdade, ontem a noite mudei a estrutura condicional e o algoritmo rodou. Obrigado @Jonathan_Medeiros pelas orientações.
Andre_Pires1
Isso mesmo, fiz essa correção muito obrigado @staroski pelas orientações!
Andre_Pires1
@hugokotsubo preciso continuar treinando, obrigado pela orientação!