Oi Allan, estive analisando o seu código e espero poder ajudá-lo.
Primeiramente, caso você tente compilar o seu código, aparecerá um erro por causa da seguinte linha:
funcionario = new Funcionario[3];
Você não pode fazer isso a forma que foi feito. Existem duas formas de "contornar" a situação. Sabemos que todo array é um objeto, então você pode criar o tal objeto já na declaração da variável do array, da seguinte forma:
class Empresa{
Funcionario[] funcionario = new Funcionario[3];
É uma solução, mas o problema disso é que sempre que você criar um objeto Empresa, ele possuirá somente 3 funcionários. Caso você queira fugir disso e criar empresas com vários tamanhos de funcionários, você pode fazer o seguinte:
class Empresa {
Funcionario[] funcionario;
//outros atributos e métodos
}
class Programa {
public static void main(String[] args) {
//primeiro cria a empresa.
Empresa empresa = new Empresa();
//depois, cria o seu array.
empresa.funcionario = new Funcionario[3];
}
}
Posteriormente, você verá que nem mesmo o código acima é uma boa prática, por questões relacionadas ao que chamamos de "Encapsulamento". Mas como você está começando com Java, não se preocupe com isso.
Fiz algumas modificações no seu código usando o seu método adicionar.
class Funcionario {
private String nome;
public Funcionario(String x) {
this.nome = x;
}
@Override
public String toString() {
return this.nome;
}
}
class Empresa {
private Funcionario[] funcionario = new Funcionario[3];
private String cnpj;
public void adicionar(Funcionario f){
int posicao = 0;
while(posicao < 3) {
this.funcionario[posicao] = f;
posicao++;
}
}
public Funcionario getFuncionario(int i) {
return this.funcionario[i];
}
}
class Testando {
public static void main(String[] args) {
Funcionario f1 = new Funcionario("José");
Empresa e1 = new Empresa();
e1.adicionar(f1);
System.out.println(e1.getFuncionario(0));
System.out.println(e1.getFuncionario(1));
System.out.println(e1.getFuncionario(2));
}
}
Note que trocamos o posicao <= 3
por posição < 3
, isso porque, como o Array possui 3 "lugares", só temos as posições 0, 1 e 2. A posição 3 é inexistente e aí ocorre um erro de compilação. Peço também que você ignore os métodos usados na classe Funcionario, posteriormente, você aprenderá mais sobre tais métodos.
O resultado que queríamos era:
José
null
null
Mas o resultado do seu método, deu:
José
José
José
Ou seja, você não adicionou José em uma posição do Array, você adicionou o José em todas as posições do Array. Para resolver isso, podemos fazer:
public void adicionar(Funcionario f){
int posicao = 0;
while(posicao < 3) {
if(this.funcionario[posicao] == null) {
this.funcionario[posicao] = f;
break;
}
posicao++;
}
}
O que o código acima faz é: ele checa cada posição menor que 3, caso a posição encontrada, seja nula, ele adiciona o objeto no array e quebra o while
(break
), caso a posição não seja nula, ele simplesmente passa para a próxima e faz o processo novamente.
Caso tenha duvidas ou encontre algum erro no meu post, sinta-se a vontade para me avisar!