Comparacao de nomes

7 respostas
Gabriel_Davi

To com o seguinte problema pessoal...
Se eu cadastrar a pessoa GABRIEL , e na hora de remover , eu digitar gabriel , não remove...diz que não foi encontrado...
Como corrigir isso !?
Outra duvida... no meu metodo de insercao gostaria ki ele verificasse se já existe um número de candidato igual...se existir emite mensagem de NUMERO JA CADASTRADO.
segue os codigos abaixo.

// Codigo pra remoção 
public String removeCandidato(String nomeCand)
    {   
        String impressao ="";
        if(listaVazia())
        {
            impressao = "Não há nenhum candidato afiliado com este nome!";        
        }
        else
        {
            NoLista p = cab;
            NoLista q = null;
            if(cab.getProx() == null && nomeCand.compareTo(cab.getInfo().getNome()) == 0)// se tiver somente um nó e o nome for encontrado
            {
                cab = null;
                impressao = "Candidato removido com sucesso!";
            }
            else if(cab.getProx()!= null && nomeCand.compareTo(cab.getInfo().getNome()) == 0)// se tiver mais de um nó e o nome for encontrado na cabeça
                { // se tiver mais de um nó e o nome for encontrado na cabeça
                    cab = cab.getProx();
                    impressao = "Candidato removido com sucesso!";
                }
                else
                {
                    while(p.getProx() != null && nomeCand.compareTo(p.getInfo().getNome()) != 0)// se tiver mais de um nó e o nome não for encontrado na cabeça
                    {
                        q = p;
                        p = p.getProx();
                        impressao = "Candidato  removido com sucesso!";
                    }
                    if(nomeCand.compareTo(p.getInfo().getNome()) == 0)
                    {
                        q.setProx(p.getProx());
                        impressao = "Candidato  removido com sucesso!";
                    }
                    else
                    {
                        impressao = "Candidato não encontrado";
                    }
               }
        }
        return impressao;
//Chamada no main
   nomeCand = (String) JOptionPane.showInputDialog(null,"Digite o nome do Candidato que deseja remover","Cadastro de nome",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
                             {
                           JOptionPane.showMessageDialog(null,p.removeCandidato(nomeCand,(partido)));
                            }
                            else
                             JOptionPane.showMessageDialog(null,"Erro! Opção inválida","Erro",JOptionPane.ERROR_MESSAGE,icone5);
                            
                         break;
// Inserir candidato

    public String insereCandidatoOrdenado(Candidato f) 
    {   
        if(listaVazia()){ // se a lista estiver vazia  
            NoLista p = new NoLista(f,null);
            cab = p;  // o funcionário é inserido na cabeça da lista
        }
        else{ // se a lista não estiver vazia
            NoLista p = cab; // cria-se uma referência para cab, assim podemos percorrer a lista
            NoLista q = null;
            NoLista t = new NoLista(f, null);
            while(p.getProx()!=null && f.getNome().compareTo(p.getInfo().getNome()) > 0)
            {
                q = p;
                p = p.getProx();
            }
            if(p == cab && f.getNome().compareTo(p.getInfo().getNome()) <= 0)     // se p estiver valendo cab e o nome do funcionário
            {                                                                     // for menor ou igual ao funcionário p                                   
                t.setProx(p);
                cab = t;
            }
            else if(p == cab && f.getNome().compareTo(p.getInfo().getNome()) > 0) // se p estiver valendo cab e o nome do funcionário
            {                                                                     // for maior que funcionário p 
                t.setProx(p.getProx());
                p.setProx(t);
            }
            else if(p != cab && f.getNome().compareTo(p.getInfo().getNome()) <= 0)// se p for diferente de cab e o nome do candidato
            {                                                                     // for menor ou igual ao funcionário p   
                t.setProx(q.getProx());
                q.setProx(t);
             }
            else                                                                  // se p for diferente de cab e o nome do candidato
            {                                                                     // for maior do que o funcionário p
                t.setProx(p.getProx());
                p.setProx(t);
            }
            cont++; // incrementa contador
        }
        String impressao = "Candidato afiliado com sucesso!";
        return impressao;

7 Respostas

fiaux

Para o problema do nome, use comparação de strings sem case sensitive, use o equalsIgnoreCase(). Uma pergunta, você está fazendo sua própria lista, encadeada, e controlando na mão?

Gabriel_Davi

Consegui o//

usei o compareToIgnoreCase() e deu certo …valeeeu =D

to desenvolvendo um programinha que controla afiliacao de candidatos em partidos…
onde as listas ficam dentro de um vetor…e cada posicao do vetor contem uma lista…

ai atraves do main chamo os metodos da classe listaligada

fiaux

Bom, não sei se no seu caso você tem alguma necessidade, obrigatoriedade de usar a lista do jeito que fez. Mas (caso não saiba) você tem estruturas de lista, entre outras, prontas para você usar.
Você fez a comparação dos nomes com compareTo. Minha sugestão é que faça comparação de strings com o método equals, mas usando o não case sensitive, que é o equalsIgnoreCase().

Exemplo:

String nome = "TESTE";
nome.equalsIgnoreCase("teste"); //o resultado desse teste é true pois ignora o case

Estude a API http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

Gabriel_Davi

Agora ta funfando certin :wink:
vo da uma olhada na API…valeu =D

agora como eu faco pra na hora da inserçao verificar se ja existe um numero igual cadastrado !?

fiaux

Antes de inserir faça uma busca em sua lista pelo valor. Se for encontrado retorna erro e informa, caso contrário insere na lista e informa.

Gabriel_Davi

Hum sim
Aonde exatamente eu devo varrer !?

Nessa parte aqui:

NoLista t = new NoLista(f, null); //Varrer aqui while(p.getProx()!=null && f.getNome().compareToIgnoreCase(p.getInfo().getNome()) > 0)

Antes do primeiro while !?

java.rco

Gabriel,

Se o número que você cadastra está no atributo nome que é acessado por f.getNome você verifica se for igual informa a mensagem que está cadastrado ou então coloca no loop um continue sem fazer nada.

Criado 25 de junho de 2008
Ultima resposta 26 de jun. de 2008
Respostas 7
Participantes 3