Cleiton, pra você pegar referencia fora do for, voce tem que criar a variável f fora dele.
public class Teste {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];
Funcionario f = null;
for(int i = 0; i < 3; i++){
f = new Funcionario();
f.nome = "Cleiton " + i;
empresa.adiciona(f);
}
System.out.println(empresa.contem(f));
System.out.println(empresa.empregados[0].nome);
System.out.println(empresa.empregados[1].nome);
System.out.println(empresa.empregados[2].nome);
System.out.println(empresa.nomeFuncionaio(f));
}
}
Depois de criada a variável você vai instanciando os novos funcionários com ela.
Criar funcionários a partir do for não é a maneira certa de se fazer isso, o exercício mostra isso pra explicar que você não poderia colocar o new Funcionario() fora do for. Se voce colocasse todo fora do for, so iria existir um funcionário que ia ser adicionado 3 vezes.
Criando funcionários a partir do for não tem como criar uma variável pra cada um deles, entao você não pode testar o método contem para cada um desses que foi criado no for.
Mas você poderia criar um outro método que buscasse o funcionário pelo o nome, pois no for daria pra mudar o nome de cada instância.
class Empresa{
\\ resto da classe
\\método de contém pelo nome
boolean contem2(String a){
for(int i = 0; i < this.livre; i++){
if(this.empregados[i].nome.equals(a)){
return true;
}
}
return false;
}
class testaEmpresa{
\\resto da classe que eu criei ai em cima
\\chamando contem2 com o 1 nome criado no for.
System.out.println(empresa.contem2("Cleiton 0"));
Contudo, a forma ideal de criar um funcionário não é usando for.
O método contem é pra saber se o funcionário foi adicionado a empresa, então você poderia criar um funcionário e não adicioná-lo.
Você pode até saber que ele existe ou que você não adicionou ele, mas se eu fosse testar teu código, eu poderia não saber quem foi adicionado ou criado. Por isso o método contem é importante.