[RESOLVIDO]Percorrendo Array de objeto com for each e Imprimindo valores

Olá pessoal, comecei estudar sobre Arrays, mas parei em um exercício. Tenho 3 classes: Funcionario, Empresa e TestaEmpresa. A classe empresa tem um atributo que é um array do objeto Funcionário, ao criar as instâncias na classe TestaEmpresa, eu vou adicionado cada funcionário nesse Array através de um método “adiciona”. O que eu queria fazer é depois de instanciados diversos funcionários(e preenchido seus atributos) percorrer esse array usando o foreach e imprimir o valor dos atributos que foi preenchido anteriormente. Já tentei alguns modos mas sem exito.

Classe Funcionário:

public class Funcionario {

	String nome;
	String departamento;
	double salario;
	String rg;
	Data dataDeEntrada;

	public void recebeAumento(double valor) {
		this.salario += valor;
	}

	public double calculaGanhoAnual() {
		return this.salario * 12;
	}

	public void descontoMensal(double valor) {
		this.salario -= valor;
	}

	public void extraMensal(double valor) {
		this.salario += valor;
	}

	public void mostra() {
		System.out.println("");
		System.out.println("None: " + this.nome);
		System.out.println("Departamento: " + this.departamento);
		System.out.println("Salário: R$ " + this.salario);
		System.out.println("RG: " + this.rg);
		System.out.println("Ganho anual: R$ " + calculaGanhoAnual());
		System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());		
	}
}

Classe Empresa:

public class Empresa {

	String nome;
	String cnpj;
	String emai;
	Funcionario[] colaboradores;
	int contador=0;

	public void adiciona(Funcionario funcionario) {
		this.colaboradores[this.contador] = funcionario;
		this.contador++;
	}

        //O laço com objetos que estou amarrado :cry:
	public void mostraEmpregados() {
		for(Funcionario colaborador : this.colaboradores) {
                      this.colaboradores.mostra();
                }
        }
}

Classe Testa Empresa:

public class TestaEmpresa{
	public static void main(String[] args) {

		Funcionario f1 = new Funcionario();
		f1.nome = "Tharles Amaro";
		f1.departamento = "Tecnologia";
		f1.salario = 5000;
		f1.rg = "000.000.000-00";
		f1.dataDeEntrada.preencherData(27, 9, 1876);

		Funcionario f2 = new Funcionario();
		f2.nome = "Joaquim Nambuco";
		f2.departamento = "Recepção Técnica";
		f2.salario = 3500;
		f2.rg = "123.456.789-09";
		f2.dataDeEntrada.preencherData(14, 10, 1993);

		Empresa empresa = new Empresa();
		empresa.colaboradores = new Funcionario[2];

		empresa.adiciona(f1);
		empresa.adiciona(f2);

		//empresa.colaboradores[0].mostra();
		//empresa.colaboradores[1].mostra();

		empresa.mostraEmpregados();
	}
}

Erro ao tentar compilar a classe Testa Empresa:

javac TestaEmpresa.java 
./Empresa.java:55: error: cannot find symbol
            this.colaboradores.mostra();
                              ^
  symbol:   method mostra()
  location: variable colaboradores of type Funcionario[]
1 error

Tu não queres mostrar o array de colaboradores, queres mostrar cada colaborador que estás a percorrer no for:

for(Funcionario colaborador : this.colaboradores) {
    colaborador.mostra();
}

Exatamente.

Fiz a alteração para:

for(Funcionario colaborador : this.colaboradores) {
    colaborador.mostra();
}

Agora compilou blz, mas quando executo apresenta a seguinte mensagem:

java TestaEmpresa 
Exception in thread "main" java.lang.NullPointerException
	at TestaEmpresa.main(TestaEmpresa.java:9)

fi.dataDeEntrada é null, terá de inicializar primeiro

f1.dataDeEntrada = new Data();
f1.dataDeEntrada.preencherData(27, 9, 1876);

Ou, ainda melhor criares um construtor em data que recebe dias, mes e ano como parametros e fazeres diretamente

f1.dataDeEntrada = new Data(27, 9, 1876);
1 curtida

Obrigado @pmlm, realmente o problema era só esse.
Deu certo depois que inicializei como você falou, de qualquer modo irei fazer o construtor.

Vlw :slight_smile: