Olá Guilherme tudo bom? O problema é o seguinte kra, você criou um vetor de referencias a Funcionarios de 10 posições, mas só preencheu duas com as referências f1,e f2, essas o compilador imprimi certo, so que seu for vai ate 9, e as outras não estão preenchida, por isso dá NullPointerException ou seja a posição depois da 2 do seu vetor estão vazias.
Diminui o for e vc vai ver que roda direitinho.
Ex
for (int i = 0; i < 2; i++) {
empresa.funcionarios[i].mostra();
}
E não vai gerar erro, ou seja você só tem 2 elementos do seu vetor referenciado, o resto referencia null, então quando vc chama funcionarios[3].mostra, é a mesma coisa que null.mostra que dá NullPointerException.
Posta o stack completo pra vermos aonde é o problema.
PS:Eu cheguei a desistir de Java quando não consegui passar desse exercício.
(Da segunda vez voltei do início e pulei essa parte, aprendi melhor depois)
public static void main (String[] args) {
Empresa empresa = new Empresa();
empresa.funcionarios = new Funcionario[2];
Funcionario f1 = new Funcionario();
f1.nome = "Guilherme";
f1.departamento = "Intervoice";
Funcionario f2 = new Funcionario();
f2.nome = "GuiGui";
f2.departamento = "INTV";
empresa.nome = "xxx";
empresa.cnpj = "12345678901234";
empresa.adiciona(f1);
empresa.adiciona(f2);
for (int i : empresa.funcionarios) {
empresa.funcionarios[i].mostra();
}
}
Fala Guilherme blz? o enhanced-for do java 5, é mais utilizado para percorrer conjuntos do tipo Set onde não tem índice que podem ser recuperados com o for normal e o get. Mas pode ser usado tbm no vetor comum.
Para usar o enhanced-for a sintaxe é a seguinte:
for( [Tipo_do_elemento] variavel: )
Onde a expressão deve ser um arranjo(vetor, ou uma List, ou um Set, etc), sendo que a variável deve ser do tipo desse elemento.
Neste seu caso você tem um vetor de referencias para que? Para funcionario e tá tentando usar um for com int por isso o erro, olhe:
for (int i : empresa.funcionarios) {
empresa.funcionarios[i].mostra();
}
empresa.funcionarios== vetor_de_referencias a Funcionario;
i== inteiro tipo primitivo;
Resultado:
found : Funcionario
required: int
for (int i : empresa.funcionarios) {
^
1 error
O erro está te dizendo você disse que era inteiro e depois colocou Funcionário, entendeu??
Pra consertar é so seguir a regra
for( [Tipo_do_elemento] variavel: )
A variavel deve ser do mesmo “tipo” da expressao entao ficaria assim:
for(Funcionario nome_qualquer: empresa.funcionario) // que é seu vetor
{
nome_qualquer.mostra();
}
Ou seja ela vai percorrer o vetor todo sempre chamando a mostra de cada um!!