Ajuda com Lista

Boa noite pessoal. Estou fazendo um trabalho de faculdade mas não estou conseguindo fazer o que foi pedido. Tenho que fazer um programa para criar uma empresa e somente com a empresa criada, adicionar funcionários e clientes, com nome e idade apenas. Essa parte eu consegui, mas tenho que exibir os dados da empresa com a quantidade de funcionários e clientes e exibir a lista de clientes e a lista de funcionários, esses dois ultimos me retornam null na criação. Segue o código até onde consegui e já agradeço de antemão qualquer ajuda.

package com.empresa.av1;

import javax.swing.JOptionPane;

public class Principal {

public static void main(String[] args) {
	
	boolean sair=false;
	
	Empresa emp = null;
					
	while(!sair) {
	
	Funcionario func = new Funcionario();
	Cliente cli = new Cliente();
		
	String opcao = JOptionPane.showInputDialog(montaMenu(),null);
	if(opcao.equals("1")) {
		emp = new Empresa();
		emp.nome = JOptionPane.showInputDialog("Informe o nome da Empresa");
		emp.cnpj = JOptionPane.showInputDialog("Entre com o CNPJ da Empresa "+emp.nome+": ");
	}
	
	if(opcao.equals("2")) {
		if(emp!=null) {
		func.nome = JOptionPane.showInputDialog("Informe o nome do Funcionario");
		func.idade = Integer.parseInt(JOptionPane.showInputDialog("Informe a idade do Funcionario "+func.nome+": "));
		} else {
			JOptionPane.showMessageDialog(null, "Nenhuma empresa cadastrada, favor escolher a opção 1");
		}
		
	}
	
	if(opcao.equals("3")) {
		if(emp!=null) {
		cli.nome = JOptionPane.showInputDialog("Informe o nome do Cliente");
		cli.idade = Integer.parseInt(JOptionPane.showInputDialog("Informe a idade do cliente "+cli.nome+": "));
	} else {
		JOptionPane.showMessageDialog(null, "Nenhuma empresa cadastrada, favor escolher a opção 1");
	}
	}
	
	if(opcao.equals("4")) {
		if(emp!=null) {
		String resultado = montaExibicao(emp);
		JOptionPane.showMessageDialog(null,resultado);
	} else {
		JOptionPane.showMessageDialog(null, "Nenhuma empresa cadastrada, favor escolher a opção 1");
	}
	}
	
	if(opcao.equals("5")) {
		if(emp!=null) {
		String resultado = exibirFuncionarios(func);
		JOptionPane.showMessageDialog(null,resultado);
	}else {
		JOptionPane.showMessageDialog(null, "Nenhuma empresa cadastrada, favor escolher a opção 1");
	}
	}
	
	if(opcao.equals("6")) {
		if(emp!=null) {
		String resultado = exibirClientes(cli);
		JOptionPane.showMessageDialog(null,resultado);
	}else {
		JOptionPane.showMessageDialog(null, "Nenhuma empresa cadastrada, favor escolher a opção 1");
	}
	}
	
	if(opcao.equals("7")) {
		
		int opcaoSair = JOptionPane.showConfirmDialog(null, "Tem certeza que deseja sair do programa?");
		if(opcaoSair==0) {
			sair=true;
		}	
	}
	
	}
}

public static String montaExibicao(Empresa e) {
	String exibicaoEmp = "";
	exibicaoEmp+="Empresa: "+e.nome+"\n";
	exibicaoEmp+="CNPJ: "+e.cnpj+"\n";
	//exibicaoEmp+="Quantidade de Funcionários: "+console.log(func.lenght)+"\n";
	return exibicaoEmp;
	
	}

public static String exibirFuncionarios(Funcionario f) {
	
	/*ArrayList <Funcionario> f = new ArrayList<Funcionario>();
	
	System.out.println("Funcionário: "+f.nome+"\n");
	*/
	String exibicaoFunc = "";
	exibicaoFunc+="Funcionário: "+f.nome+"\n";
	exibicaoFunc+="Idade: "+f.idade+"\n";
	return exibicaoFunc;
	
	}

public static String exibirClientes(Cliente c) {
	String exibicaoCli = "";
	exibicaoCli+="Cliente: "+c.nome+"\n";
	exibicaoCli+="Idade: "+c.idade+"\n";
	return exibicaoCli;
	
	}
public static String montaMenu() {
	
	String menu="";
	menu+="------------------------------------------------\n";
	menu+="1 - Criar Empresa\n";
	menu+="2 - Adicionar Funcionário\n";
	menu+="3 - Adicionar Cliente\n";
	menu+="4 - Exibir dados da Empresa\n";
	menu+="5 - Exibir dados dos Funcionários\n";
	menu+="6 - Exibir dados dos Clientes\n";
	menu+="7 - Sair\n";	
	menu+="------------------------------------------------\n";
	return menu;

}

}

Faz isso com StringBuilder pra economizar memória.

As propriedades (nome e demais) das suas classes Cliente/Empresa/Funcionário estão com quais modificador de visibilidade? Private né? Se sim, muda pra public e testa.

Lembre que, dentro do princípio de segurança por encapsulamento, é melhor usar getters & setters específicos.

Boa noite amigo.
Estão todos como public.

Você está declarando e inicializando os objetos dentro do while.
Na próxima iteração, eles vão ser inicializados novamente, perdendo os dados que você definiu.

1 curtida

Então poste aí a mensagem completa de erro e o conteúdo de todas as classes.

Não chega a apresentar erro.
Quando eu cadastro a empresa, eu peço pra exibir e exibe de boa, mas na hora de exibir os clientes retorna nome null e idade 0.
As classes são simples:

public class Cliente {
public String nome;
public int idade;
}

public class Funcionario {
public String nome;
public int idade;
}

Vê o que o @RoinujNosde falou:

Joga a criação dos objetos pra fora do laço while e testa.

Acho que agora foi, obrigado pela ajuda @Fefo80 e @RoinujNosde.

Lembre de marcar o post dele como “solução”.

Nesse projeto seria interessante ter uma lista de Funcionário e Cliente dentro da empresa, porque desse jeito só vai criar um funcionário/cliente.