Verificar se existe numero igual

10 respostas
Gabriel_Davi

Ae pessoal estou fazendo um pequeno programa pra um trabalho de estrutura de dados....
trata-se de um programa pra cadastrar candidatos em seus partidos...
um vetor com 4 posicoes, onde cada posicao recebe uma lista (partido)
No meu método de inserção de candidato não estou conseguindo restringir que dois candidatos tenham o mesmo numero.... gostaria que ao entrar com o mesmo numero de um candidato ja cadastrado, aparecesse a mensagem: Numero ja cadastrado , e voltasse para a tela de digitar numero....
Segue abaixo o código

// Chamada no MAIN

       //Adicionar um novo Candidato
                        case 1:
                          {
                                          
                              nomeCand = (String) JOptionPane.showInputDialog(null,"Digite o nome do Candidato","Cadastro de nome",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                              
                             cargoCand =(String) JOptionPane.showInputDialog(null,"Digite o cargo do Candidato","Cadastro de cargo",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                            
                                 numero  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite o número do Candidato","Cadastro de número",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
 if (p.validacaoNumero(numero) == false) //teste de verificação se já existe número do candidato igual
                                 {
                                   do 
                                    { 
                                      numero  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Número de candidato já existe, re-digite o número do Candidato","Cadastro de número",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                                    } while (p.validacaoNumero(numero) != true); 
                                 } //fim teste
                           
                                 votos  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite a quantidade de votos do Candidato","Cadastro de votos",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                          
                                 partido = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Selecione o partido do Candidato:  \n\n"+
                                                                    "[1] - PT \n"+    
                                                                    "[2] - PSDB \n"+ 
                                                                    "[3] - PMDB \n"+ 
                                                                    "[4] - PV \n\n" ,"Seleção de Partido",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                                                                    
                             if (partido > 0 && partido <5) //verifica se o partido é válido
                             {
                             Candidato c  = new Candidato(nomeCand,cargoCand,numero,votos,partido);                              
                             p.insereCandidato(c,partido);
                                                                  
                            JOptionPane.showMessageDialog(null,"------------Dados do Candidato-------------\n\n"+
                                                               "O Candidato foi afiliado com sucesso!\n\n"+
                                                               "Nome: "+nomeCand+" \n"+
                                                               "Cargo: "+cargoCand+" \n"+
                                                               "Número: "+numero+" \n"+
                                                               "Votos: "+votos+" \n"+
                                                               "Partido: "+partido+" \n"+ "\n\n","Cadastrado!", JOptionPane.INFORMATION_MESSAGE,icone);
                                                            }                                   
                            else
                            JOptionPane.showMessageDialog(null,"Erro! Opção inválida","Erro",JOptionPane.ERROR_MESSAGE,icone5);
                                                                                 
                           break; }
//11. Método que valida o número do candidato
    
    public boolean validaNumero(int numero)
     { 
         NoLista p = cab;
         while ( p != null && numero != p.getInfo().getNumero() )
          {
            p = p.getProx();
          }
       return (p == null);
    }
// 12. Método que testa se o candidato escolheu um número igual a algum cadastrado.
    // Envia mensagem de erro já pedindo novamente outro número para validação.
    
    public boolean validacaoNumero(int numero)
    {
        return partidos[5].validaNumero(numero);
    }

10 Respostas

vinidouradoh

cara…

você pode criar uma classe para politico. Com isso, adiciona um método equals() e um hashCode() nesta classe e utilize o método contains() do arraylist. Neste caso, você pode criar o equals() e hashCode pelo numero do candidato.

Qualquer dúvida, estamos ai,

grande abraço!

vinidouradoh

ah sim…

você pode também criar a classe politico, implementar o equals() e o hashCode() e utilizar um Set, que não permite objetos repetidos.

Veja ai como você acha melhor.

Grande abraço

Gabriel_Davi
Entao, eu tenho a classe politico..Candidato no caso...so ki tem apenas os metodos set`s e get`s ... da uma olhada..
import java.util.*;   // importa pacote util
 public class Candidato
    {
        private String nome; // nome do candidato
        private String cargo; // cargo do candidato
        private int numero;   // numero do candidato
        private  int votos;   // quantidade de votos do candidato
        private int partido;  // partido do candidato
        
       //Construtor
       
       public Candidato(String nome, String cargo, int numero, int votos, int partido)
       { this.nome = nome;            // atribui nome ao candidato
         this.cargo = cargo;          // atribui cargo ao candidato
         this.numero = numero;        // atribui numero ao candidato
         this.votos = votos;          // atribui quantidade de votos ao candidato
        this.partido = partido;}      // atribui partido ao candidato
         
 //-----------------------------------------------------------------------------------------------//
 //--------------------------------Metodos seletores----------------------------------------------//
         
    public String getNome()  
    { return nome; }                  //Retorna o nome do candidato
    
    
    public String getCargo()
    { return cargo;}                 //Retorna o cargo do candidato
    
    
    public double getNumero()
    { return numero;}                //Retorna o número do candidato
    
    
    public int getVotos()
    { return votos;}                //Retorna o numero de votos do candidato
    
    
    public int getPartido()         //Retorna o partido do candidato
    { return partido;}
    
 //-----------------------------------------------------------------------------------------------//
 //--------------------------------Metodos modificadores----------------------------------------------//
 
      public void setNome(String nomex) 
      { nome = nomex; }                //Altera o nome do candidato
      
      public void setCargo(String cargox)
      { cargo = cargox; }             //Altera o cargo do candidato
      
      public void setNumero(int numerox)
      { numero = numerox;}          //Altera o número do candidato
      
      public void setVotos(int votosx)
      { votos = votosx;}     //Altera o numero de votos do candidato
      
      public void setPartido(int partidox)
      { partido = partidox ; } // Altera o partido do candidato
      
      
    }

Como faco !?

davidbuzatto

Seu código podia ir para
Desculpa, mas não pude evitar :slight_smile:

Rapaz, olha a lógica do seu “validador de número” concorda que tem um monte de coisa errada ali?
Parece que vc sempre vai ter um p == null… Vc percorre toda a lista e no final sempre vai ter p apontando para null não é isso? Seu método então sempre vai retornar true.

Se vc organizasse melhor o código daria para diagnosticar o problema de forma mais fácil… Fica difícil concluir algo com essa bagunça e sem o código da sua estrutura da dados… Vc precisa mesmo implementar uma?

vinidouradoh

Estes são os métodos que falei para colocar na classe Candidato:

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + numero;

return result;

}
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	final Candidato other = (Candidato) obj;
	if (numero != other.numero)
		return false;
	return true;
}

As coleções utilizam eles para achar objetos.

Você pode fazer assim no seu código, se você tiver utilizando um arrayList:

Candidato c = new Candidato();

c.setNumero(1);

if (colecaoCandidatos.contains©){

//faz alguma coisa se seu arrayList contiver um candidato com este numero

}else{

//senão faz outra coisa

}

O contains utiliza o equals para comparar cada elemento de uma coleção com um objeto. Se achar, retorna true.
Entendeu?

ps: você está utlizando qual IDE?

Gabriel_Davi
Alterei meu método para o seguinte
public boolean validaNumero(int numero)
     { 
         NoLista p = cab;
         while ( p != null && numero != p.getInfo().getNumero() )
          {
            p = p.getProx();
          }
            if(numero==(p.getInfo().getNumero()))
            {return true; }
            
       return false;
    }

Porém, quando rodo o main, ele sempre da Erro! Opcão inválida!

aqui novamente o código do main

{
                                          
                              nomeCand = (String) JOptionPane.showInputDialog(null,"Digite o nome do Candidato","Cadastro de nome",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                              
                             cargoCand =(String) JOptionPane.showInputDialog(null,"Digite o cargo do Candidato","Cadastro de cargo",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                            
                                 numero  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite o número do Candidato","Cadastro de número",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                         if (p.validacaoNumero(numero) == true) //teste de verificação se já existe número do candidato igual
                                 {
                                   do 
                                    { 
                                      numero  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Número de candidato já existe, re-digite o número do Candidato","Cadastro de número",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                                    } while (p.validacaoNumero(numero) != false); 
                                 } //fim teste 
                           
                                 votos  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite a quantidade de votos do Candidato","Cadastro de votos",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                          
                                 partido = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Selecione o partido do Candidato:  \n\n"+
                                                                    "[1] - PT \n"+    
                                                                    "[2] - PSDB \n"+ 
                                                                    "[3] - PMDB \n"+ 
                                                                    "[4] - PV \n\n" ,"Seleção de Partido",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                                                                    
                             if (partido > 0 && partido <5) //verifica se o partido é válido
                             {
                             Candidato c  = new Candidato(nomeCand,cargoCand,numero,votos,partido);                              
                             p.insereCandidato(c,partido);
                                                                  
                            JOptionPane.showMessageDialog(null,"------------Dados do Candidato-------------\n\n"+
                                                               "O Candidato foi afiliado com sucesso!\n\n"+
                                                               "Nome: "+nomeCand+" \n"+
                                                               "Cargo: "+cargoCand+" \n"+
                                                               "Número: "+numero+" \n"+
                                                               "Votos: "+votos+" \n"+
                                                               "Partido: "+partido+" \n"+ "\n\n","Cadastrado!", JOptionPane.INFORMATION_MESSAGE,icone);
                                                            }                                   
                            else
                            JOptionPane.showMessageDialog(null,"Erro! Opção inválida","Erro",JOptionPane.ERROR_MESSAGE,icone5);
                                                                                 
                           break; }
vinidouradoh

cara…

acho q vc ta complicando uma coisa fácil. Vc nao disse que cada vetor aponta para uma lista de candidatos? Basta vc ver na lista do partido se o candidato já foi cadastrado. Vc nao precisa nem percorrer a lista, o método contains() faz isso pra vc. Implementa ai os métodos que escrevi e teste “if contains()”. Entendeu?

T+

fabiozoroastro

Gabriel???
Da Puc-São Gabriel?
Eh vc fi?

LPJava

ou define a regra do equals + hashcode para determinar quando os elementos sao realmente iguais.

Gabriel_Davi
vinidouradoh:
cara...

acho q vc ta complicando uma coisa fácil. Vc nao disse que cada vetor aponta para uma lista de candidatos? Basta vc ver na lista do partido se o candidato já foi cadastrado. Vc nao precisa nem percorrer a lista, o método contains() faz isso pra vc. Implementa ai os métodos que escrevi e teste "if contains()". Entendeu?

T+

Coloquei o código que você me passou na classe candidato ...e esse no main:
case 1:
                          
                                          
                              nomeCand = (String) JOptionPane.showInputDialog(null,"Digite o nome do Candidato","Cadastro de nome",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                              
                             cargoCand =(String) JOptionPane.showInputDialog(null,"Digite o cargo do Candidato","Cadastro de cargo",JOptionPane.QUESTION_MESSAGE,icone1,null,null);
                            
                                 numero  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite o número do Candidato","Cadastro de número",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                         
                           
                                 votos  = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Digite a quantidade de votos do Candidato","Cadastro de votos",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                          
                                 partido = Integer.parseInt((String) JOptionPane.showInputDialog(null,"Selecione o partido do Candidato:  \n\n"+
                                                                    "[1] - PT \n"+    
                                                                    "[2] - PSDB \n"+ 
                                                                    "[3] - PMDB \n"+ 
                                                                    "[4] - PV \n\n" ,"Seleção de Partido",JOptionPane.QUESTION_MESSAGE,icone1,null,null));
                                                                    
                             if (partido > 0 && partido <5) //verifica se o partido é válido
                             {
                             Candidato c  = new Candidato(nomeCand,cargoCand,numero,votos,partido);
                             c.setNumero(1); 
if (colecaoCandidatos.contains(c)){ 
JOptionPane.showMessageDialoga(null,"Erro!Número já cadastrado!","Erro",JOptionPane.ERROR_MESSAGE,icone5);
}else{ 

                             p.insereCandidato(c,partido);
                                                                  
                            JOptionPane.showMessageDialog(null,"------------Dados do Candidato-------------\n\n"+
                                                               "O Candidato foi afiliado com sucesso!\n\n"+
                                                               "Nome: "+nomeCand+" \n"+
                                                               "Cargo: "+cargoCand+" \n"+
                                                               "Número: "+numero+" \n"+
                                                               "Votos: "+votos+" \n"+
                                                               "Partido: "+partido+" \n"+ "\n\n","Cadastrado!", JOptionPane.INFORMATION_MESSAGE,icone);
                                                            } }                                  
                            else{
                            JOptionPane.showMessageDialog(null,"Erro! Opção inválida","Erro",JOptionPane.ERROR_MESSAGE,icone5); }
                                                                                 
                           break;

Dá erro dizendo que nao achou a variavel colecaoCandidato e nem o metodo contain() ...
eu to usando array mais na "mão"...sem a classe arraylist

Criado 1 de julho de 2008
Ultima resposta 1 de jul. de 2008
Respostas 10
Participantes 5