Verificar se existe numero igual

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

[code]// 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; }[/code]

[code] //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);
}[/code]

[code] // 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);
}[/code]

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!

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

Entao, eu tenho a classe politico…Candidato no caso…so ki tem apenas os metodos sets e gets … da uma olhada…

[code]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
  
  
}

  
  
  [/code]

Como faco !?

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?

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?

Alterei meu método para o seguinte [code] 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;
}[/code]

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

aqui novamente o código do main

[code]{

                          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; }[/code]

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+

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

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

[quote=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+[/quote]

Coloquei o código que você me passou na classe candidato …e esse no main:

[code] 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©){
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; [/code]

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