Ir para o conteúdo
Firewall

[Resolvido] Verificar valores repetidos

Mensagens Recomendadas

Firewall

Olá á todos

Bem me deparo com um problema, eu estou fazendo um programa que o usuário digite o tamanho do vetor, e após definir o tamanho preencher todo o vetor com números. Até aqui tudo bem(muito fácil...até de mais).

Mas agora tem um pequeno problema eu consegui fazer para verificar se existe números iguais e mostrar, mas quando eu rodo o programa ele funciona perfeitamente até quando tiver 2 números iguais, se passar de 2 números iguais em no vetor ele já fica doido. olhe minha lógica:

for(int i=0;i<TAMVET-1;i++){
 for(int j = i+1; j <TAMVET;j++){
if (numero[j] == numero[i]) {
  System.out.println("O elemento" +numero[j] + "se repete \n");
}
 }
}

já fiz vários tipos de estrutura para pegar o valor que se repete no vetor, mas o que até agora oque deu mais certo foi este.



import javax.swing.JOptionPane;
public class vetor10PosiçõesInformarIguais {
 public static void main(String[] args){
int TAMVET = Integer.parseInt(JOptionPane.showInputDialog("Porfavor, Informe o Tamanho do Vetor")); //Foi colocado para o usuario digitar o tamanho do VETOR( isto para vcs fazerem testes, pra ficar mais agilizado
int numero[] = new int[TAMVET]; // o tamanho informado será armazenado na array "numero"
String m = ""; //isto servira como um System.out.println, já que estamos utilizando interface gráfica
boolean verificador = false; //um simples operador de decisão para o Bubble sort e para mostrar se há ou nao valores repetidos no vetor
boolean repetiu = false; // ele será para verficar se repetiu ou nao o numero no vetor...mas devem estar se perguntando porque nao utilizei o boolean acima(verificador),Simples a variavel só poderá realizar a sua designação, se utilizar a mesma variavel para fazer varios tipos de decisões que nao tem nada a ver com o motivo na qual ela foi criada, o programa não estará seguindo a convenção de código

//Este Ciclo for será para armazenar valores no vetor "numero"
for(int i = 0; i < TAMVET; i++){
  int x = Integer.parseInt(JOptionPane.showInputDialog("Digite o Numero da " +(i)+ "º Posição do Vetor"));// utilizamos a variavel de escopo temporaria x para receber o valor informado pelo usuario
  numero[i] = x;
}

/*
 * Este while(abaixo) fará oque nós programadores conhecemos como Bubble sort, ele téra como funcionalidade, organizar o vetor do menor numero ao maior por exemplo
 * Se no vetor foi armazenado assim(supondo que seja 3 numeros): [5,8,0,2]
 * o Bubble sort irá organizar desta forma [0,2,5,8].
 * Mas porque foi utilizado o Bubble sort?
 * R: Relativamente Simples(relativamente *-*),existem varias formas de se resolver o problema proposto por este exercicio,mas a forma que utilizei irá fazer
 * com que ele olhe na posição seguinte e veja se ela é ou nao parecida e se nao for pula pra proxima linha do vetor e assim se nao utilizar o Bubble sort irá
 * sempre dar um monte de numeros nada a ver com oque foi digitado.
 */
while(!verificador){ //se verificador for diferente de true entao ele entrano ciclo, lembrando oque foi feito nesta linha é um resumo de while(verificador != true){
  verificador = true; //o verficador é atribuido verdadeiro
  for(int i=0; i<TAMVET-1; i++){ //até aqui tudo bem só uma estrutura para percorrer o vetor
	if(numero[i] > numero[i+1]){ //se o numero, for maior que o, numero uma posição a frente, então ele entra no ciclo
	  verificador = false; // e o verificador é atribuido o valor de falso
	  int x = numero[i+1];// a variavel de escopo temporaria o "x" para armazenar o valor de numero na posição +1(a frente) do ciclo for(o i)
	  numero[i +1]= numero[i]; // o valor de numero na posição +1(a frente) do ciclo for(o i) irá receber o numero na posição do ciclo sem nehuma modificação
	  numero[i] = x; // e assim o numero do ciclo sem modificação irá receber o valor de x
	} //fechamos o if
  } // fechamos o for
} //por fim, fechamos o while

/*
 * Ahá, Agora vem a parte sistematica do programa aonde nós realmente iremos resolver o problema do exercicio proposto:
 * no final irei explicar oque foi feito para descobrir qual os valores que foram repetidos, não explicarei agora porque explicar sem ver é complicado
 */
m+=("-----------~~'OS Valores Repetidos'~~-------------- \n"); // a varivel m fará um papel parecido do System.out.println aonde mostrar em uma janela a mensagem que foi informada
for(int i=0;i<TAMVET-1;i++){
  for(int j = i+1; j <TAMVET;j++){
	if (numero[j] == numero[i]) {
	  repetiu = true;
	  m+=("O elemento" +numero[j] + "se repete \n");
	}
  }
}
if(!repetiu){m+=(" ~~'Nenhum Elemento Foi Repetido'~~");}
JOptionPane.showMessageDialog(null,m);
 }
}

Editado por Firewall
Corrigida indentação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

xiii ....

int numero[] = new numero[10];                                 // isto é exemplo porque dizes que está feito

Arrays.sort(numero);                                           // ordenar o array

for (int i = 1; i < numero.length(); i++) {                    // ciclo de comparação
 if (numero[i] == numero[i-1])                                // comparação com o anterior, lembra-te que o array já se encontra ordenado
   System.out.println("O elemento" +numero[j] + "se repete"); // não é necessário o '\n', a função println já faz isso
}

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Firewall

xiii ....

int numero[] = new numero[10];								 // isto é exemplo porque dizes que está feito

Arrays.sort(numero);										   // ordenar o array

for (int i = 1; i < numero.length(); i++) {					// ciclo de comparação
 if (numero[i] == numero[i-1])								// comparação com o anterior, lembra-te que o array já se encontra ordenado
System.out.println("O elemento" +numero[j] + "se repete"); // não é necessário o '\n', a função println já faz isso
}

Primeiramente obrigado por responder...

fiz uma correção para dar certo....

for (int i = 1; i < numero.length; i++) { // no length nao precisa ter o (), somente se for em um método(pelo que eu me lembre é, me corriga se eu estiver errado)
}

HappyHippyHippo, ficou na mesma coisa, olhe bem se eu fazer assim se eu colocar mais de 2 numeros iguais ele buga todo, olha o exemplo...

agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim

[1,1,6,7]

o programa irá me mostrar assim:

O elemento 1 se repete

O elemento 2 se repete

Ok, deu tudo certo.... mas olhe oque acontece em um segundo exemplo...

agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim

[1,1,1,7]

o programa irá me mostrar assim:

O elemento 1 se repete

O elemento 1 se repete

Viu.. não sei porque o programa faz isto... ou minha lógica está errada, ou não sei...

@OBS: pode me dizer como você fez pra o código ficar colorido... fica mais fácil a compreensão =)

Editado por Firewall

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Ok, deu tudo certo.... mas olhe oque acontece em um segundo exemplo...

agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim

[1,1,1,7]

o programa irá me mostrar assim:

O elemento 1 se repete

O elemento 1 se repete

Viu.. não sei porque o programa faz isto... ou minha lógica está errada, ou não sei...

int last = numero[0] + 1;                 // variável usada para prevenir a repetição do valor
for (int i = 1; i < numero.length; i++) {
 if (numero[i] == numero[i-1] &&
     last != numero[i-1]) {              // o valor a ser verificado tem de ser diferente do último apresentado
   last = numero[i];                     // actualizar a variável de verificação
   System.out.println("O elemento" + last + "se repete");
 }
}

@OBS: pode me dizer como você fez pra o código ficar colorido... fica mais fácil a compreensão =)

quando escreves código no forum, usaste as tags [ code] e [ /code] (sem espaços claro)

para activar o syntaxe highlight, tens de definir qual a linguagem que estás a apresentar:

[ code=java] ... [ /code] (sem espaços claro)

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Firewall

int last = numero[0] + 1;				 // variável usada para prevenir a repetição do valor
for (int i = 1; i < numero.length; i++) {
 if (numero[i] == numero[i-1] &&
  last != numero[i-1]) {			  // o valor a ser verificado tem de ser diferente do último apresentado
last = numero[i];					 // actualizar a variável de verificação
System.out.println("O elemento" + last + "se repete");
 }
}

quando escreves código no forum, usaste as tags [ code] e [ /code] (sem espaços claro)

para activar o syntaxe highlight, tens de definir qual a linguagem que estás a apresentar:

[ code=java] ... [ /code] (sem espaços claro)

Muito obrigado não me atentei em fazer uma variavel para fazer a intermediação, e ainda por cima estava fazendo o inverso... obrigado =)

e para fins didáticos caso alguém queira , aqui esta o código com funcionando,


import java.util.Arrays;
import javax.swing.JOptionPane;  
public class PaneEX2 {
 public static void main(String[] args){
   int TAMVET = Integer.parseInt(JOptionPane.showInputDialog("Porfavor, Informe o Tamanho do Vetor"));  //Foi colocado para o usuario digitar o tamanho do   VETOR( isto para vcs fazerem testes, pra ficar mais agilizado
   int numero[] = new int[TAMVET]; // o tamanho informado será armazenado na array "numero"
   String m = ""; //isto servira como um System.out.println, já que estamos utilizando interface gráfica
   boolean repetiu = false; // ele será para verificar se repetiu ou não o numero no vetor...

   //Este Ciclo for será para armazenar valores no vetor "numero"
   for(int i = 0; i < TAMVET; i++){ 
     numero[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o Numero da " +(i)+ "º Posição do Vetor"));// utilizamos a variavel de escopo temporaria x para receber o valor informado pelo usuario
   }

   Arrays.sort(numero); // ordenar o vetor

   m+=("-----------~~'OS Valores Repetidos'~~--------------  \n"); // a varivel m fará um papel parecido do System.out.println aonde mostrar em uma janela a mensagem que foi informada e o += serve para somar o conteudo na mesma janela ou seja, tudo que for informado para o m+= será acrecentado na mesma janela anterior.
   int last = numero[0] + 1;                 // variável usada para prevenir a repetição do valor
   for (int i = 1; i < numero.length; i++) {
     if (numero[i] == numero[i-1] && last != numero[i-1]) {              // o valor a ser verificado tem de ser diferente do último apresentado
       repetiu = true;
       last = numero[i];                     // actualizar a variável de verificação
       System.out.println("O Numero: " + last + " Se Repete no Vetor");
     }
   }
   if(!repetiu){m+=("                 ~~'Nenhum Elemento Foi Repetido'~~");}
   JOptionPane.showMessageDialog(null,m); // mostra na janela a variavel m.
 }
}

Agradecimento á HappyHippyHippo, pela grande ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.