GARANTIR DESCONTO

Fórum Numeros repetidos n vetor #570098

29/10/2016

0

Como faço para comparar no vetor os numeros repetido e dizer quais os numeros repetidos e a quantidade que foram repetidos. Fiz de uma maneira, mas toda vez que digito um número, ele diz que aquele numero foi repetido tantas vezes. Eu quero que no final ele só diga os números repetidos e quantas vezes foram repetidos.

public static void main(String[] args) {
Scanner s = new Scanner(System.in);

int quant;
int cont =0;
int atual;

System.out.println("Digite o tamanho do vetor");
quant = s.nextInt();

int vetValor[] = new int [quant];
int valor;
int vetDif[] = new int [quant];
int vetIgual[] = new int [quant];

for(int i=0; i<vetValor.length;i++){
System.out.println("Digite os valores");
valor = s.nextInt();
vetValor[i] = valor;
}


for(int i=0; i< vetValor.length;i++){
atual = vetValor[i];
cont =0;
for(int j=0; j<vetValor.length;j++){

if(vetValor[j] ==atual){
cont++;
vetIgual[i] = atual;
}else{
vetDif[j] = atual;

}

}
Thun An

Thun An

Responder

Posts

01/11/2016

Thiago Vasconcelo

A forma mais complicada de fazer é essa: (usando tipos primitivos similar ao que vc fez)

package pacoteB;

import java.util.Scanner;

public class TesteMain {

	public static void main(final String[] args) {
		final Scanner s = new Scanner(System.in);

		int quant;

		System.out.println("Digite o tamanho do vetor");
		quant = s.nextInt();

		final int vetValor[][] = new int[quant][1];
		int valor;

		// FIXME observe que o tamanho do vetor não será totalmente preenchido
		// uma vez que temos valores repetidos.
		// O ideal seria digitar algo para sair 'digite S para sair' algo assim
		for (int i = 0; i < vetValor.length; i++) {
			System.out.println("Digite os valores");
			valor = s.nextInt();

			// TODO varrer o vetValor para verificar se contém o numero digitado
			boolean valorJaInformado = false;
			for (int j = 0; j < vetValor.length; j++) {
				// se não entender essa linha procurar por if ternário
				// vetValor[j][1] = (vetValor[j][0] == valor ? vetValor[j][1] +
				// 1 : 1);

				// incrementa o valor se ele já foi informado
				valorJaInformado = vetValor[j][0] == valor;
				if (valorJaInformado) {
					// Somando o total do valor
					vetValor[j][1] = vetValor[j][1] + 1;
					// não continuar verificando
					break;
				}

			}

			// se valor não informado
			if (!valorJaInformado) {
				// informar novo valor com total 0
				vetValor[i][0] = valor;
				vetValor[i][1] = 0;
			}
		}

		s.close();
	}
}
Responder

Gostei + 0

01/11/2016

Thiago Vasconcelo

A forma mais simples é usar algum tipo de coleção java que aceite chave valor. Por exemplo o hashMap<key, value>;

No caso em key teriamos os valores digitados pelo usuário. no value teriamos a quantidade.

o 'key' não pode ser repetido. Se vc mandar inserir duas key's iguais o valor será substituido.

ficaria algo como:
(if ternario -> condição ? valor se verdadeiro : valor se falso)

hashMap.contais(valor) ? hashMap.put(valor, hashMap.get(valor) +1) : hashMap.put(valor, 1)

o que estou fazendo nessa linha é .... se tiver o valor pega o valor que já tem (hashMap.get(valor)) e soma + 1 se não tiver simplesmente colocar o valor 1.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar