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…`
package listadexercicios;
import java.util.Scanner;
/*
Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas.
Imprima as consoantes.
*/
public class Questao29 {
public static void main(String[] args) {
String[] vetor = new String[5];
String vetoraux;
int cons = 0;
Scanner input = new Scanner(System.in);
for (int c = 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 (int c = 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]);
}
}
}
}
Informe um caractere:
a
Informe um caractere:
c
Informe um caractere:
v
Informe um caractere:
b
Informe um caractere:
o
A quantidade de consoantes é :5
a
c
v
b
o
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 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…
package listadexercicios;
import java.util.Scanner;
/*
Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas.
Imprima as consoantes.
*/
public class Questao29 {
public static void main(String[] args) {
char[] vetor = new char[5];
char vetoraux;
int cons = 0;
Scanner input = new Scanner(System.in);
for (int c = 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 (int c = 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]);
}
}
}
}
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
@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 .
package listadexercicios;
import java.util.Scanner;
/*
Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas.
Imprima as consoantes.
*/
public class Questao29 {
public static void main(String[] args) {
char[] vetor = new char[5];
char vetoraux;
int cons = 0;
Scanner input = new Scanner(System.in);
for (int c = 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);
}
}
Informe um caractere:
a
Informe um caractere:
s
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:1515)
at listadexercicios.Questao29.main(Questao29.java:17)
@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…
package listadexercicios;
import java.util.Scanner;
/*
Faça um Programa que leia um vetor de 05 caracteres, e diga quantas consoantes foram lidas.
Imprima as consoantes.
*/
public class Questao29 {
public static void main(String[] args) {
char[] vetor = new char[5];
char vetoraux;
int cons = 0;
Scanner input = new Scanner(System.in);
for (int c = 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);
}
}
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 = new char[5];
int cons = 0;
Scanner input = new Scanner(System.in);
for (int c = 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”).