Não Encerra o Cadastro

18 respostas
evertonsilvagomesjav

ola pessoal seguinte to com o seguinte método para cadastros porem ele nao exibe a msg de encerramento de cadastros me ajudem por favor...

public boolean cadastrarCliente(Cliente cliente){  	
    	for( int i=0 ; listaClientes.length > i ; i++){
    		listaClientes[i]=cliente;
    		JOptionPane.showMessageDialog(null,"Cliente Cadastrado");	
    		return true;
    	  }
    	JOptionPane.showMessageDialog(null,"Cadastro Encerrado");	
    	return false;
    	
       	}

EDIT (Moderador) - Por favor, não escreva tudo em maiúsculas :(

18 Respostas

evertonsilvagomesjav

desculpaa =/

mais tem como alguem me ajudar ai?

T

Faça um "teste de mesa". Fazendo o teste de mesa, você vai ver que deve mostrar apenas uma mensagem "Cliente Cadastrado" se listaClientes.length > 0, e só aparecerá a mensagem ""Cadastro Encerrado"" se listaClientes.length == 0. Você não precisa comparar com mais alguma coisa? Não sei o que você quer fazer, na verdade.

evertonsilvagomesjav

seguinte eu to tentando criar um metodo para cadastrar Clientes e jogalos no array: Cliente listaClientes[] = new Cliente[3] porem ele vai cadastrando direto e nao da essa msg pra mim JOptionPane.showMessageDialog(null,“Cadastro Encerrado”)

public boolean cadastrarCliente(Cliente cliente){ for( int i=0 ; listaClientes.length > i ; i++){ listaClientes[i]=cliente; JOptionPane.showMessageDialog(null,"Cliente Cadastrado"); return true; } JOptionPane.showMessageDialog(null,"Cadastro Encerrado"); return false;

T

Tem um “return true” que está no lugar errado. Quando é que você quer que retorne true?

lina

Oi,

Quando você fez return true, automaticamente deixou de executar a sequincia.:

JOptionPane.showMessageDialog(null,"Cadastro Encerrado"); return false;

Tchauzin!

evertonsilvagomesjav

eu quero q ele preencha enquanto o array for maior que o contador, o true e pra ele continuar a sequencia certo? quando exceder o limite do array era pra exibir essa mensagem de "Cadastro Encerrado".

public boolean cadastrarCliente(Cliente cliente){     
        for( int i=0 ; listaClientes.length > i ; i++){   
            listaClientes[i]=cliente;   
            JOptionPane.showMessageDialog(null,"Cliente Cadastrado");     
            return true;   
          }   
        JOptionPane.showMessageDialog(null,"Cadastro Encerrado");     
        return false;   
           
        }
lina

Oi,

Você está confundindo as coisas...

O comando for, sempre irá se repetir de acordo com a 2º operação.:

listaClientes.length > i

Ou seja, enquanto a lista de clientes for maior do que seu contador, o for repetirá sozinho!

Quando você coloca a função return true, irá indicar a quem chamou o método cadastrarCliente que a operação foi concluida com sucesso.

Seu programa poderia ser assim.:

public boolean cadastrarCliente(Cliente cliente){     
        for( int i=0 ; listaClientes.length > i ; i++){   
            listaClientes[i]=cliente;   
            JOptionPane.showMessageDialog(null,"Cliente Cadastrado");  
               
          }   
        JOptionPane.showMessageDialog(null,"Cadastro Encerrado");     
        return true;   
           
        }

Porém, seria um retorno desnecessário! o método poderia ser void:

public void cadastrarCliente(Cliente cliente){     
        for( int i=0 ; listaClientes.length > i ; i++){   
            listaClientes[i]=cliente;   
            JOptionPane.showMessageDialog(null,"Cliente Cadastrado");     
              
          }   
        JOptionPane.showMessageDialog(null,"Cadastro Encerrado");     
        
           
        }

Tchauzin!

evertonsilvagomesjav

estou com uma duvida suprema, estou confundindo as coisas olha só:

desta forma esta dando pra mim cadastrar os clientes em cada posiçao correta do array mais eu nao entendo pq o contador i++ esta agindo sem uma estrutura de repetiçao
public boolean cadastrarCliente(Cliente cliente){  	
    	if(listaClientes.length > i){
    		listaClientes[i]=cliente;
    		i++;
    		JOptionPane.showMessageDialog(null,"Cliente Cadastrado");	
    		return true;
    	  }
    	JOptionPane.showMessageDialog(null,"Cadastro Encerrado");	
    	return false;

eu achava que somente assim funcionava pq com a estrutura for esta fazendo com que o contador ande no vetor pra poder cadastrar mais dessa forma esta dando erro eu cadastro um cliente apenas e aparece pra mim tres vezes direto a msg "Cliente Cadastrado" e em seguida a msg "Cadastro Encerrado"....

public boolean cadastrarCliente(Cliente cliente){       
        for( int i=0 ; listaClientes.length > i ; i++){     
            listaClientes[i]=cliente;     
            JOptionPane.showMessageDialog(null,"Cliente Cadastrado");     
                 
          }     
        JOptionPane.showMessageDialog(null,"Cadastro Encerrado");       
        return true;     
             
        }
evertonsilvagomesjav

alguem pode me falar qual ah diferença?

lina

Oi,

Realmente você está confundindo tudo! rsrs

Esse código.:

public boolean cadastrarCliente(Cliente cliente){  	
    	if(listaClientes.length > i){
    		listaClientes[i]=cliente;
    		i++;
    		JOptionPane.showMessageDialog(null,"Cliente Cadastrado");	
    		return true;
    	  }
    	JOptionPane.showMessageDialog(null,"Cadastro Encerrado");	
    	return false;

Utiliza um IF. Ou seja, só irá passar 1 vez na mensagem Cliente Cadastro.

Esse outro código.:

public boolean cadastrarCliente(Cliente cliente){       
        for( int i=0 ; listaClientes.length > i ; i++){     
            listaClientes[i]=cliente;     
            JOptionPane.showMessageDialog(null,"Cliente Cadastrado");     
                 
          }     
        JOptionPane.showMessageDialog(null,"Cadastro Encerrado");       
        return true;     
             
        }

Você está utilizando FOR, ou seja, irá mostrar a mensagem de Cliente Cadastrado até que listaClientes.length > i ou melhor, até a variavel i ter o mesmo valor do que a quantidade de clientes.

Apresentou 3 vezes a mensagem Cliente Cadastrado porque a sua variavel listaClientes.length tem conteudo 3.

Sugiro que você estude do inicio! procure entender o que é if, else, for, while.. antes de fazer seus programas! (Isso não é uma critica e sim uma sugestão!)

Tchauzin!

evertonsilvagomesjav

ta mais como um IF icrementa meu vetor pq eu etendo q o for q faz o meu i ganhar uma posiçao

edmarr

Como percebi vc nao esta familiarizado com o uso de estruturas de repetição creio que o jeito mais fácil de vc entender seria assim .

public boolean cadastrarCliente(Cliente cliente){     
		boolean result = false;


		for( int i=0 ; listaClientes.length > i ; i++){
			if(listaClientes[i] == null){
				listaClientes[i]=cliente;  
				JOptionPane.showMessageDialog(null,"Cliente Cadastrado");
				result = true;
			}
		}
		
		if(result){
			JOptionPane.showMessageDialog(null,"Cadastro Encerrado");      
		}
		else{
			JOptionPane.showMessageDialog(null,"Erro ao Tentar Cadastrar o Cliente");      
		}
		return result;
}

Portanto existe maneiras melhor de se trabalhar do que usando um array , um exempro eh um ArrayList , que fica mais fácil vc nao precisa saber o tamanho e talz , lembrando o exemplo foi apenas didatico pois teria que saber qual o tamanho do vetor para poder tratar para nao dar um erro em tempo de execução .

CrOnNoS

Seu “IF” incrementa o vetor por causa da instrução “i++” contida no código do IF. Como não tem nenhuma variável “i” declarada no método, quer dizer que esse i é uma variável da classe (statica ou de objeto). Ou seja, seu objeto tem uma variável “i”, que todos os métodos enxergam, e que é usada para dizer onde está o último espaço vazio do vetor (onde deve se cadastrar o próximo).
É esse “i” que o seu IF está incrementando.

evertonsilvagomesjav

estaaa ficando mais claro agora cronoss mais o seguinte nao precisa de loop para o “i” voltar e ser incrementado nao isso q eu quero dizer, eu achava q so com loop dava pra fazer icrementaçao pq a ultima posiçao ganharia mais um com o Loop dado

edmarr

Tive que fazer uma edição no post , mas creio q vc ira entender facilmente agora .

Bom Estudo !

evertonsilvagomesjav

agora acho q entendi cronos me corrija se estiver errado por favor como eu tenho:

if(listaClientes.length > i){ listaClientes[i]=cliente; i++;

devido a minha condiçao dentro do if no caso listaClientes.length > i meu i esta sendo incrementado cada vez q eu adiciono MANUAL os dados do meu cliente

se eu fosse por exemplo setar os dados automatico por exemplo nas tres posiçoes do meu array eu poderia usar um FOR

CrOnNoS

Não é questão de “usar o IF” e “usar o FOR”. A questão é COMO usar.
Da forma que você está usando o for, ele vai fazer o “i” começar em 0 (que é a posição inicial de vetores) e executar o for até o “i” equivaler a última casa do vetor.
Se você quisese listar todos os seus clientes por exemplo, acessar todas as casas do vetor seria útio, logo esse for com pequenas alterações seria útio.

Já para cadastrar UM usuário, não há necessidade de um for (a menos que por exemplo, você queira se mover por todo o vetor buscando em qual posição que ainda não tem um cliente cadastrado). Como você já guarda a posição onde se deve salvar o próximo Cliente no “i” da classe, não é necessário fazer uma busca por essa posição. Mas também não seria bom você continuar adicionando Clientes até extrapolar o tamanho do seu vetor, pois isso geraria um erro (excessão de IndexOutOfBound), por isso um “IF” verificando se a posição atual que o “i” está apontando é válida ou não foi colocado antes de tentar salvar o cliente.

edmarr

Olhe a validação que fiz antes de tentar inseri-lo no array .

Criado 24 de agosto de 2009
Ultima resposta 24 de ago. de 2009
Respostas 18
Participantes 5