[RESOLVIDO]Problema com Metodo de Pesquisa

27 respostas
evertonsilvagomesjav

Ola pessoa segue o metodo de pesquisa

public void pesquisaCliente(Long id){
    	
    	if (listaClientes[0] != null)
    	{	
    	for(int i=0 ; listaClientes.length > i ; i++){
   	 	if(listaClientes[i].getId() == id)
   	 	JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]); 
    	}
                }
    	else
    	JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");
            }

Estou cadastrando Clientes em um array de 3 posiçoes se eu cadastrar um e pesquisa-lo em seguida ele encontra pra mim porém em vez de voltar ao programa ele fecha o programa dando o seguinte erro:

Exception in thread "main" java.lang.NullPointerException
	at com.squadra.caixa.persistencia.entidade.Banco.pesquisaCliente(Banco.java:77)
	at com.squadra.caixa.persistencia.principal.Principal.main(Principal.java:52)

Mas se eu Cadastro os 3 clientes e pesquiso so depois de cadastrar os 3 ja nao da esse erro mais...

Me ajudem ai nao sei o erro :cry:

27 Respostas

R

Cara o problema é o seguinte:

Quando vc usa listaClientes.length > i, vc está dizendo que ele vai até a posição 2(tendo o tamanho do array = 3), sendo assim se não tiver os 3 campos cadastrados ele vai retornar null nos outros 2 campos.

Para resolver vc pode usar uma variavel pra contar clientes cadastrados, assim vc usa na sua pesquisa algo assim:

for (int =0; contadorCliente > i; i++)
B

Ou simplesmente for (int i = 0; i < listaClientes.length - 1; i++) {

evertonsilvagomesjav

se eu usar esse codigo aqui

for (int i = 0; i < listaClientes.length - 1; i++) {

ele vai da o mesmo erro pois se eu cadastrar um cliente só ele vai retornar null no outro campo num é nao?

evertonsilvagomesjav

e se eu usar esse código aqui utilizando contador pros clientes, como meu array sao 3 posiçoes se eu cadastrar na 3 posiçao direto no caso a posiçao 2 ele nao vai encontrar o cliente pq o contador do cliente vai esta valendo 1

Alguem me ajuda :cry:

for (int =0; contadorCliente > i; i++)
edmarr

ja tentou usar assim .

for (int i = 0; i < listaClientes.length ; i++) {
evertonsilvagomesjav

eu tava usando assim so q se eu cadastrar um Cliente apenas e pesquisa-lo em seguida ele encontra mas da erro em seguida e fecha o programa

for(int i=0 ; listaClientes.length > i ; i++)
edmarr

[quote=edmarr]ja tentou usar assim .

for (int i = 0; i < listaClientes.length ; i++) {

Olha bem o que eu disse da maneira que vc flw n vai funcionar msm .

evertonsilvagomesjav

qual a diferença disso que vc me passou:

for (int i = 0; i < listaClientes.length ; i++) {

para isso q eu to fazendo:

for(int i = 0;  listaClientes.length > i; i++){
edmarr

normalmente utilizasse a verificação primeiro da variável q ta sendo incrementada .
Ou seja deste jeito que eu lhe falei ira percorrer todos os indices do array , agora vc fazendo -1 ele iria parar no índice 1 lembrando em um array o índice
começa do 0 .

evertonsilvagomesjav

os dois jeitos esta dando erro se eu cadastrar um cliente e pesquisar ele sai do programa
se eu cadastrar os tres e pesquisar da certo…

edmarr

posta todo o codigo que vc esta usando ai fica mais facil de entender , como assim da erro ?

evertonsilvagomesjav
public void pesquisaCliente(Long id){
    	int i=0;
    	try
    	{
    	if (listaClientes[i] != null)
    	{	
    	for( i = 0; i < listaClientes.length ; i++){
   	 	if(listaClientes[i].getId() == id)
   	 	{
   	 	JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]); 
    	}
   	 	else
   	 		JOptionPane.showMessageDialog(null,"ID não Encontrado");
        }
    	
    	}
    	else
        	JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");
       		
    	}
    	
    catch(Exception  e){
		JOptionPane.showMessageDialog(null,"Error na Compilaçao " );
    }
    }

AI O METODO DE PESQUISA Q TO USANDO...REPETINDO:

SE EU PESQUISO APOS O CADASTRO DE UM CLIENTE APENAS ELE ACHA MAS DA ERRO E SAI DO PROGRAMA, SE EU PESQUISO APOS O CADASTRO DOS 3 CLIENTES NAO DA ERRO...

edmarr

qual erro Acontece ?

evertonsilvagomesjav

Exception in thread "main" java.lang.NullPointerException at com.squadra.caixa.persistencia.entidade.Banco.pesquisaCliente(Banco.java:80) at com.squadra.caixa.persistencia.principal.Principal.main(Principal.java:52)

edmarr

Agora sim .... Se tivesse postado tudo que estava acontecendo ja teriamos lhe falado

public void pesquisaCliente(Long id){
	int i=0;
	try{
		if (listaClientes[i] != null){	
			for( i = 0; i < listaClientes.length ; i++){
				if(listaClientes[i] != null && listaClientes[i].getId() == id){
					JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]); 
				}else{
					JOptionPane.showMessageDialog(null,"ID não Encontrado");
				}
			}
		}
		else{
			JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");
		}
	}catch(Exception  e){
		System.out.println("Erro : " + e.getMessage() );
	}finally{
			JOptionPane.showMessageDialog(null,"Error no PesquisaCliente " );
	}
	
}

ps. tem como fazer a pesquisa ficar mais inteligente :D

evertonsilvagomesjav

me explica ai o que vc fez edmar por favor?

evertonsilvagomesjav

ta dando um erro ainda rs… ele cai no erro depois de verificar as posiçoes

edmarr

Funcionou ....

entao eh so verifiquei se o array estava preenchido ou nao ;

if(listaClientes[i] != null && listaClientes[i].getId() == id){

mas ainda tem um erro aqui oh tem q ficar assim

public void pesquisaCliente(Long id){
	int i=0;
	try{
		if (listaClientes[i] != null){	
			for( i = 0; i < listaClientes.length ; i++){
				if (listaClientes[i] != null){	
					if(listaClientes[i].getId() == id){
						JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]); 
					}else{
						JOptionPane.showMessageDialog(null,"ID não Encontrado");
					}
				}
			}
		}
		else{
			JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");
		}
	}catch(Exception  e){
		System.out.println("Erro : " + e.getMessage() );
	}finally{
			JOptionPane.showMessageDialog(null,"Error no PesquisaCliente " );
	}
	
}
evertonsilvagomesjav

COM ESSE CODIGO QUANDO EU CADASTRAVA UM CLIENTE E PESQUISAVA TAVA DANDO A MSG DO FINALLY, OU SEJA ACUSANDO UM ERRO NE?

public void pesquisaClientes(Long id){  
	    	     int i=0;  
	    	     try{  
	    	       if (listaClientes[i] != null){    
	    	              for( i = 0; i < listaClientes.length ; i++){  
	    	                   if (listaClientes[i] != null){    
	    	                 if(listaClientes[i].getId() == id){  
	    	                        JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]);   
	    	                   }
	    	                 else
	    	                   {  
	    	                        JOptionPane.showMessageDialog(null,"ID não Encontrado");  
	    	                    }  
	    	              }  
	    	          }
	    	       }
	    	       else
	    	       {  
	    	             JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");  
	    	         }  
	         }
	    	       catch(Exception  e){  
	    	        System.out.println("Erro : " + e.getMessage() );  
	    	      }
	         finally
	         {  
	    	   JOptionPane.showMessageDialog(null,"Error no PesquisaCliente " );  
	    	 }  
	    	         
	    	   }

AGORA COM ESSE RESOLVIDO MEU PROBLEMA RSRS MAIS PQ TAVA DANDO A MSG DO FINALLY NO CODIGO ACIMA?

public void pesquisaClientes(Long id){  
	    	     int i=0;  
	    	  
	    	       if (listaClientes[i] != null){    
	    	              for( i = 0; i < listaClientes.length ; i++){  
	    	                   if (listaClientes[i] != null){    
	    	                 if(listaClientes[i].getId() == id){  
	    	                        JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]);   
	    	                   }
	    	                 else
	    	                   {  
	    	                        JOptionPane.showMessageDialog(null,"ID não Encontrado");  
	    	                    }  
	    	              }  
	    	          }
	    	       }
	    	       else
	    	       {  
	    	             JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");  
	    	         }  
	         }
}
evertonsilvagomesjav

ultima pergunta aki nesse topico qual a diferença disso

if (listaClientes[i] != null){    
	    	              for( i = 0; i < listaClientes.length ; i++){  
	    	                   if (listaClientes[i] != null){    
	    	                 if(listaClientes[i].getId() == id){  
	    	                        JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]);   
	    	                   }
	    	                 else
	    	                   {  
	    	                        JOptionPane.showMessageDialog(null,"ID não Encontrado");  
	    	                    }  
	    	              }  
	    	          }
	    	       }
	    	       else
	    	       {  
	    	             JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");  
	    	         }

pra isso: ou seja no lugar de dois ifs fazer duas condiçoes em um if...

if (listaClientes[i] != null){    
	    	              for( i = 0; i < listaClientes.length ; i++){  
	    	                   if (listaClientes[i] != null &&  listaClientes[i].getId() == id){
	    	                 
                                    JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]);   
	    	                   }
	    	                 else
	    	                   {  
	    	                        JOptionPane.showMessageDialog(null,"ID não Encontrado");  
	    	                    }  
	    	              }  
	    	         
	    	       }
	    	       else
	    	       {  
	    	             JOptionPane.showMessageDialog(null,"Nao existe Usuario cadastrado");  
	    	         }
Thiago_Luis

Fala cara, blza?

O finally é SEMPRE executado, indiferente se aconteceu uma exception ou não.
Geralmente ele é usado para fechar conexões com o banco, com arquivos, essas coisas.

No caso do if, pra mim não tem diferença alguma. Eu inclusive uso o modo com && e o resultado é o mesmo. Me corrijam se estiver errado. A única coisa que eu faço de diferente é colocar um break depois que encontrar o cliente, senão ele sempre executa o else.
if (listaClientes[i] != null &&  listaClientes[i].getId() == id){
	    	                 
JOptionPane.showMessageDialog(null,"Usuarios Procurado" +listaClientes[i]);   
break;
 }else{.........

Abraço

evertonsilvagomesjav

po thiago brigadaooo cara nao sabia dessa do finally agora os ifs achei tb que nao tinha diferença ehe

brigadao!!!

edmarr

Não Esqueça de editar o Título adicionando a tag [RESOLVIDO] no final do Título , Depois tirar suas duvidas.

Bom Estudo !!!

evertonsilvagomesjav

rs edmar to caça ndo aki pra editaar o titulo do topico so num to achando

edmarr

Assim que vc abre o seu tópico la em cima tem o botão Editar basta clicar e adicionar a tag no final da linha .

R

E ai pessoal!
Bom vou insistir no meu metodo

for (int =0; contadorCliente > i; i++)

Pelo que vi, vc não está cadastrando em uma ordem, vc permiti cadastro em qualquer posição (meio confuso :s), enfim, se vc consegue fazer com que o camarada insira apenas na posição 2(seria a 3 no array), vc deve ter alguma variavel e representa a posição 2, se não como o cadastro iria aparece lá, por mágica que não.
Ai é só vc usar o contador pra conta os cadastro para saber quantos array vc tem, e um outro array que armazena a posição.

Por exemplo, vc cria outro array de 3 e mais um contador, vc cadastrando apenas a posição 3, o seu contador fica valendo 1, e no array posição 0 vc armazena a posição 3, assim na pesquisa vc insere seu array de cadastro na posição arrayDePosição na posição [i], algo mais ou menos assim:

for (int =0; contadorCliente > i; i++){ system.out.println("Clientes Cadastrado: " + arrayCliente[arrayDePossicao[i]]); }

Espero que seja isso, se não for da um toque!

evertonsilvagomesjav

VLW AE PESSOAL PELA AJUDA BRIGADAO MESMO!!!

Criado 27 de agosto de 2009
Ultima resposta 28 de ago. de 2009
Respostas 27
Participantes 5