Erro na contagem de caracteres no array

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

Alguem poderia me ajudar?

Qualquer char será sempre diferente de a ou diferente de e ou diferente de i
Tu pretendes contar os que são diferentes de a e diferentes de e e diferentes de i

Pois é, você criou um vetor de String, não de char.
Vetor de caracteres seria assim:

 char[] vetor = new char[5];

@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

1 curtida

Vou pesquisar esse método, obrigado.

@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)

Aqui você deveria pegar sempre a posição ZERO!

vetor[c] = input.next().charAt(0);

@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);
	}

}

Quem puder me ajudar , desde já agradeço.

O problema não é a variável, a sua lógica da condicional está incorreta, inclusive já citaram este problema nas respostas anteriores!

if (vetor[c] != 'a' && vetor[c] != 'e' && vetor[c] != 'i' && vetor[c] != 'o' && vetor[c] != 'u') {
    cons += 1;
}
1 curtida

Deveria ser charAt(0) e não charAt(c).

1 curtida

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 :poop:, 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”).

1 curtida

Verdade, ontem a noite mudei a estrutura condicional e o algoritmo rodou. Obrigado @Jonathan_Medeiros pelas orientações.

Isso mesmo, fiz essa correção muito obrigado @staroski pelas orientações!

@hugokotsubo preciso continuar treinando, obrigado pela orientação!