Duvida em Lógica

5 respostas
M

Ola galera,

Então estou tentando fazer um programa bem básico em Java, onde vai funcionar na memória RAM mesmo(Apenas testes), o programa é o seguinte: Efetua cadastro de clientes(colocando o nome e o id, é bem básico mesmo, pois depois iriei implementar mais coisas), o problema é o seguinte, tenho minha classe Cliente, e a classe Registrar, nela tenho o método registra, onde é feito o cadastro do cliente, o problema é que sempre tenho que criar um objeto de Cliente, no código na mão, gostaria que fosse assim: o usuário cadastrava o cliente, e o programa já criava um objeto de Clientes, gostaria de saber se existe alguma forma de fazer isto, já procurei bastante e não achei, estou procurando ainda;)

Segue o meu código.

public class Cliente {
	private Long id;
	private String nome;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public boolean equals(Object object){  
         if (this.getId() == ((Cliente) object).getId()){
        	 return true;  
         } 
        else{  
        	 return false;  
         }  
    }


}


public class Registrar {
	List<Cliente>listaClientes = new ArrayList<Cliente>();
	Scanner valores = new Scanner(System.in);
	
	void registrar(){
		System.out.println("Digite o nome do cliente");
		String valorNome = valores.nextLine();
		
		System.out.println("Digite o id do cliente");
		Long valorId = Long.parseLong(valores.nextLine());
                
                Cliente cliente = new Cliente();  // Aqui onde gostaria que os objetos fossem criados automaticamente quando o registra() for chamado
		
		cliente.setId(valorId);
		cliente.setNome(valorNome);
		
		adiciona(cliente);
		
	}
	
	void adiciona(Cliente cliente){
		 this.listaClientes.add(cliente);
	}

}

Já até tentei fazer um loop onde o usuário colocava o tanto de cliente que iria cadastrar, assim o loop criava o tanto de objetos,mas não deu certo;/, e achei um modo muito feio hehe

Valeu.

5 Respostas

drsmachado
Definitivamente não entendi o que quer. Se você se refere como "criar o cliente quando chama o método registrar" como instanciar o mesmo e não declarar, pode fazer assim:
public class Registrar {  
    List<Cliente>listaClientes = new ArrayList<Cliente>();  
    Scanner valores = new Scanner(System.in);  
    Cliente cliente;//note, aqui eu o declaro

    void registrar(){  
        System.out.println("Digite o nome do cliente");  
        String valorNome = valores.nextLine();  
        
        System.out.println("Digite o id do cliente");  
        Long valorId = Long.parseLong(valores.nextLine());  
                  //aqui eu instancio-o como sendo um novo objeto da classe Cliente
         cliente = new Cliente();
        cliente.setId(valorId);  
        cliente.setNome(valorNome);  
          
        adiciona(cliente);  
          
    }  
      
    void adiciona(Cliente cliente){  
         this.listaClientes.add(cliente);  
    }  
  
}
M
drsmachado:
Definitivamente não entendi o que quer. Se você se refere como "criar o cliente quando chama o método registrar" como instanciar o mesmo e não declarar, pode fazer assim:
public class Registrar {  
    List<Cliente>listaClientes = new ArrayList<Cliente>();  
    Scanner valores = new Scanner(System.in);  
    Cliente cliente;//note, aqui eu o declaro

    void registrar(){  
        System.out.println("Digite o nome do cliente");  
        String valorNome = valores.nextLine();  
        
        System.out.println("Digite o id do cliente");  
        Long valorId = Long.parseLong(valores.nextLine());  
                  //aqui eu instancio-o como sendo um novo objeto da classe Cliente
         cliente = new Cliente();
        cliente.setId(valorId);  
        cliente.setNome(valorNome);  
          
        adiciona(cliente);  
          
    }  
      
    void adiciona(Cliente cliente){  
         this.listaClientes.add(cliente);  
    }  
  
}

Então entendi, mas o problema é quero cadastrar os clientes depois efetuar uma listagem, e pode ser cadastrado N clientes.
Estou guardando os clientes em uma lista, depois irei fazer a listagem por ela.

drsmachado

Sim, para isto, ao fim do método registrar, você possui uma invocação ao método adicionar, não?
Esse método tem como finalidade inserir o cliente criado na lista de clientes.
Para listar os cadastrados, basta iterar sobre a lista e ir mostrando.

M

drsmachado:
Sim, para isto, ao fim do método registrar, você possui uma invocação ao método adicionar, não?
Esse método tem como finalidade inserir o cliente criado na lista de clientes.
Para listar os cadastrados, basta iterar sobre a lista e ir mostrando.

Então dei uma procurada na net, e achei o código abaixo, porém da exceção : java.lang.IndexOutOfBoundsException

ListIterator<Cliente> it = listaClientes.listIterator();  
		 while (it.hasNext()) {  
			 System.out.println(it.next());
			  
		    
		 }

coloquei dentro do método adiciona.

Lucas_Soares

Boa tarde.
Para iterar sobre um ArrayList faça:

for(Cliente cli : listaClientes)
{
   ...
}

^
|
|
---- assim fica mais difícil de gerar exceção.

Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 5
Participantes 3