Adicionando em uma lista [RESOLVIDO]

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.

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

}
[/code]

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.

[code]import java.util.ArrayList;
import java.util.List;

public class Lista {

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

}
[/code]

Agradeço a ajuda desde já.

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.

[quote=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.[/quote]

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

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

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

} [/code]

[quote=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 :slight_smile:

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

} [/code]
[/quote]

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.

Boa noite , é pq vc esta inserindo sempre o mesmo objeto tente assim
Tira a declaração global

[code]
case 1:
Cliente c = new Cliente();
String nome = inCliente.lerNome();
String telefone = inCliente.lerTelefone();

            c.setNome(nome);  
            c.setTelefone(telefone);  
          
            listar.lista().add(c);  [/code]

[quote=wilkem]Boa noite , é pq vc esta inserindo sempre o mesmo objeto tente assim
Tira a declaração global

[code]
case 1:
Cliente c = new Cliente();
String nome = inCliente.lerNome();
String telefone = inCliente.lerTelefone();

            c.setNome(nome);  
            c.setTelefone(telefone);  
          
            listar.lista().add(c);  [/code][/quote]

Perfeito!

Funcionou 100% agora. Muito obrigado.

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.

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

}
[/code]