Adicionando em uma lista [RESOLVIDO]

7 respostas
cristiano_matos

Boa noite pessoal. Sou novo no fórum assim como no Java e gostaria da ajuda de vocês.

Estou estudando através de um projeto que fiz, da seguinte forma.

import java.util.Scanner;

public class Main {

	@SuppressWarnings("resource")
	public static void main (String[] args) {
		
		Cliente c = new Cliente();
		InputCliente inCliente = new InputCliente();
		OutputCliente outCliente = new OutputCliente();
		Lista listar = new Lista();
		
		int opcao = 0;
		
		while(opcao != 9) {
			System.out.println("**** MENU DE OPÇÕES ****");
			System.out.println("1 - Cadastrar");
			System.out.println("2 - Listar");
			System.out.println("9 - Sair");
			System.out.print("Entre com o opção: ");
			Scanner in = new Scanner(System.in);
			opcao = in.nextInt();
			
			if(opcao == 9) {
				System.out.println("Obrigado por utilizar o sistema!");
				break;
			}
			
			switch(opcao) {
			case 1:
				String nome = inCliente.lerNome();
				String telefone = inCliente.lerTelefone();
				
				c.setNome(nome);
				c.setTelefone(telefone);
			
				listar.lista().add(c);
				
				break;
			case 2:
				for(Cliente c1 : listar.lista()) {
					outCliente.imprimir(c1);
				}
				break;
			default:
				System.out.println("Opção inválida. Tente novamente");
				break;
			}
		}
	}
}

Gostaria de, assim que for dado a entrada nas informações do cliente, gravá-lo em uma lista para imprimir a mesma na opção 2 mas quando seleciono a opção 2 nada é impresso.

Aqui está classe Lista que provavelmente não está fazendo nada.

import java.util.ArrayList;
import java.util.List;


public class Lista {

	public List<Cliente> lista() {
		List<Cliente> listar = new ArrayList<>();
		return listar;
	}
	
}

Agradeço a ajuda desde já.

7 Respostas

S

Quando você terminar a opção 1 tente colocar um:

System.out.println(listar.lista().size());

Antes do break e veja o valor que aparece no seu console.

cristiano_matos

Sem_Nome:
Quando você terminar a opção 1 tente colocar um:

System.out.println(listar.lista().size());

Antes do break e veja o valor que aparece no seu console.

A lista só retorna 0, ou seja, nada está sendo incluído a ela.

Emersonsts

No código abaixo, toda vez que você chama o método lista() vc está criando uma nova lista e retornando essa nova lista.

public List&lt;Cliente&gt; lista() {  
        List&lt;Cliente&gt; listar = new ArrayList&lt;&gt;();  
        return listar;  
    }
Tente alterar a classe Lista para o código abaixo e teste novamente :)
import java.util.ArrayList;  
import java.util.List;  
  
public class Lista {  

    List&lt;Cliente&gt; lista;
    public Lista() {
        lista = new ArrayList&lt;Cliente&gt;();
    }
  
    public List&lt;Cliente&gt;lista() {  
        return lista;  
    }     
}
cristiano_matos
Emersonsts:
No código abaixo, toda vez que você chama o método lista() vc está criando uma nova lista e retornando essa nova lista.
public List&lt;Cliente&gt; lista() {  
        List&lt;Cliente&gt; listar = new ArrayList&lt;&gt;();  
        return listar;  
    }
Tente alterar a classe Lista para o código abaixo e teste novamente :)
import java.util.ArrayList;  
import java.util.List;  
  
public class Lista {  

    List&lt;Cliente&gt; lista;
    public Lista() {
        lista = new ArrayList&lt;Cliente&gt;();
    }
  
    public List&lt;Cliente&gt;lista() {  
        return lista;  
    }     
}

Está adicionando a lista sim!

O único problema é, por exemplo: Entro com um cliente Cristiano e quando vou cadastrar o segundo ele adiciona esse 2 vezes e o primeiro some da lista.

W
Boa noite , é pq vc esta inserindo sempre o mesmo objeto tente assim Tira a declaração global
case 1:  
                Cliente c = new Cliente();
                String nome = inCliente.lerNome();  
                String telefone = inCliente.lerTelefone();  
                  
                c.setNome(nome);  
                c.setTelefone(telefone);  
              
                listar.lista().add(c);
cristiano_matos
wilkem:
Boa noite , é pq vc esta inserindo sempre o mesmo objeto tente assim Tira a declaração global
case 1:  
                Cliente c = new Cliente();
                String nome = inCliente.lerNome();  
                String telefone = inCliente.lerTelefone();  
                  
                c.setNome(nome);  
                c.setTelefone(telefone);  
              
                listar.lista().add(c);

Perfeito!

Funcionou 100% agora. Muito obrigado.

cristiano_matos

Agradeço a ajuda de todos por me esclarecerem em minha dúvida.

Segue abaixo como ficou o novo código.

OBS: dispensei a classe Lista e criei uma nova lista de Cliente dentro da classe Main mesmo -> Lista listagem = new ArrayList();

Retirei o objeto Cliente c da declaração global e o transferi para o case 1: (obrigado ao wilkem)
Dessa forma um novo Cliente é criado a cada cadastro e inserção na lista, não mais repetindo-se as entradas.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	
	@SuppressWarnings("resource")
	public static void main (String[] args) {
		
		InputCliente inCliente = new InputCliente();
		OutputCliente outCliente = new OutputCliente();
		List<Cliente> listagem = new ArrayList<Cliente>();
		
		int opcao = 0;
		
		while(opcao != 9) {
			System.out.println("**** MENU DE OPÇÕES ****");
			System.out.println("1 - Cadastrar");
			System.out.println("2 - Listar");
			System.out.println("9 - Sair");
			System.out.print("Entre com o opção: ");
			Scanner in = new Scanner(System.in);
			opcao = in.nextInt();
			
			if(opcao == 9) {
				System.out.println("Obrigado por utilizar o sistema!");
				break;
			}
			
			switch(opcao) {
			case 1:
				Cliente c = new Cliente();
				
				String nome = inCliente.lerNome();
				String telefone = inCliente.lerTelefone();
				
				c.setNome(nome);
				c.setTelefone(telefone);
			
				listagem.add(c);
				System.out.println(listagem.size());
				
				break;
			case 2:
				for(Cliente c1 : listagem) {
					outCliente.imprimir(c1);
				}
				break;
			default:
				System.out.println("Opção inválida. Tente novamente");
				break;
			}
		}
	}
}
Criado 5 de março de 2013
Ultima resposta 5 de mar. de 2013
Respostas 7
Participantes 4