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;
}
}
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)