Por favor alguem pode me ajudar a prosseguir, não consigo passar como argumento um array de funcionario para minha classe empresa, não consigo fazer como o exercício pede…
public class Empresa
{
private String nome;
private String cnpj;
Funcionario[] funcionarios;
public Empresa(String nome, String cnpj, Funcionario[] funcionarios)
{
this.nome = nome;
this.cnpj = cnpj;
this.funcionarios = funcionarios;
}
//nao entendi nada desse metodo
public void adicionaFuncionariosNaEmpresa(Funcionario funcionarios)
{
int i;
Funcionario[] f = new Funcionario[10];
this.funcionarios[f.length] = funcionarios;
for(i = 0; i <= f.length; i++);
{
System.out.println(f[i]);
}
}
public String imprimiEmpresaComFuncionarios()
{
StringBuffer sb = new StringBuffer();
sb.append("Empresa : " + this.nome + "\n");
sb.append("CNPJ : " + this.cnpj + "\n");
sb.append("Funcionarios : " + this.funcionarios + "\n");
return sb.toString();
}
}
- Volte ao nosso sistema de Funcionario e crie uma classe Empresa. A Empresa tem um nome, cnpj e uma array de Funcionario, além de outros atributos que você julgar necessário
class Empresa {
// outros atributos
Funcionario[] funcionarios;
String cnpj;
}
- A empresa deve ter um método adiciona que recebe uma referência a
Funcionario como argumento, e guarda esse funcionario. Algo como:
…
void adiciona(Funcionario f) {
// algo tipo: this.funcionarios[ ??? ] = f;
// …
}
…
Você deve inserir o Funcionario em uma posição da array que esteja livre. Existem várias maneira para você fazer isso: guardar um contador para indicar qual a próxima posição vazia ou procurar por uma posição vazia toda vez. O que seria mais interessante?
É importante reparar que o método adiciona não recebe nome, rg, salário, etc. Essa seria uma maneira nem um pouco estruturada, muito menos orientada a objetos de se trabalhar. Vocêantes cria um Funcionario e já passa a referência dele, que dentro do objeto possui rg,
salário, etc.
- Crie uma outra classe, que vai possuir o seu método main. Dentro dele crie algumas instâncias de Funcionario e passe para a empresa pelo método adiciona. Repare que antes Capítulo 5 Um pouco de arrays Página 51e Orientação a Objetos você vai precisar criar a array, pois inicialmente o atributo funcionarios da classe Empresa não se referencia a lugar nenhum (null):
Empresa empresa = new Empresa();
empresa.funcionarios = new Funcionario[10];
// …
Ou você pode construir a array dentro da própria declaração da classe Empresa. Crie alguns funcionários e passe como argumento para o adiciona da empresa:
Funcionario f1 = new Funcionario();
f1.salario = 1000;
empresa.adiciona(f1);
Você pode criar esses funcionários dentro de um loop se preferir.
Opcional: o método adiciona pode gerar uma mensagem de erro indicando que a arrayestá cheia.
4) Percorra o atributo funcionarios da sua instância da Empresa e imprima o salários de todos seus funcionários. Ou você pode chamar o método mostra() de cada Funcionario da sua array.
Cuidado: alguns índices do seu array podem não conter referência para Funcionario construído, isto é, ainda se referirem para null.
-
(Opcional) Crie um método para verificar se um determinado Funcionario se encontra ou não como funcionario desta empresa: boolean contem(Funcionario f) { // … } Você vai precisar fazer um for na sua array, e verificar se a referência passada como argumento se encontra dentro da array. Evite ao máximo usar números hardcoded, isto é, use o .length.
-
(Opcional) Caso a array já esteja cheia no momento de adicionar um outro funcionário, criar uma nova maior e copiar os valores. Isto é, fazer a realocação já que java não tem isso: uma array nasce e morre com o mesmo length.

