Não Encerra o Cadastro

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…

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

   	}[/code]

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

desculpaa =/

mais tem como alguem me ajudar ai?

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.

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;

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

Oi,

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

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

Tchauzin!

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”.

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

    }  [/code]

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.:

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

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

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

Tchauzin!

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”…

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

alguem pode me falar qual ah diferença?

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.:

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

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!

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

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 .

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.

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

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

Bom Estudo !

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

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.

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