Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Construtor - exercício 2 (classe empresa)

Para responder a questão, tive que olhar no fórum o que estavam dizendo. Consegui compilar e tudo mais, mas notei que não faz a menor diferença, na verdade no main o que está importando mesmo é o "Funcionario[ ] f = new Funcionarios[10]" o que coloco no "Empresa empresa = new Empresa(1)" é descartado.

Meus códigos para analisar:

class Empresa {
  private String nome;
  private String cnpj;
  private Funcionario[] empregados;
  private int livre = 0;

  public Empresa(int qtdFuncionarios) {
    this.empregados = new Funcionario[qtdFuncionarios];
  }

//para poder aceitar o array empregados que é privado e o TestaEmpresa não consegue alterar
  public void setEmpregados (Funcionario[] empregados) {
    this.empregados = empregados;
  }

  public String getNome() {
    return this.nome;
  }
  public void setNome(String nome) {
    this.nome = nome;
  }

  public String getCnpj() {
    return this.cnpj;
  }
  public void setCnpj(String cnpj) {
    this.cnpj = cnpj;
  }

  public Funcionario getFuncionario(int posicao) {
    return this.empregados[posicao];
  }

  public void adicionar(Funcionario f) {
    this.empregados[this.livre] = f;
    this.livre++;
  }

  public void getEmpregados() {
    for(int i=0; i<this.livre; i++) {
      if(this.empregados[i] == null) continue;
      System.out.println(this.nome+"\t"+this.cnpj);
      System.out.println("Funcionário na posição: "+i);
      this.empregados[i].mostra();
    }
  }

  public boolean contem(Funcionario f) {
    for(int i=0; i<this.empregados.length; i++) {
      if(this.empregados[i] == null) continue;
      if(f == this.empregados[i]) {
        return true;
      }
    }
    return false;
  }
}
class TestaEmpresa {
  public static void main(String[] args) {
    Empresa empresa = new Empresa(1);
    Funcionario[] f = new Funcionario[2];

    empresa.setEmpregados(f);

    empresa.setNome("BlaBla CO.");
    empresa.setCnpj("123456/00001");

    Funcionario f1 = new Funcionario();
    f1.setNome("Fulano de tal");
    f1.setDepartamento("Conceitual Generalista");
    f1.setSalario(2500.0);
    //solução para poder formatar a data em uma única linha e ainda respeitar o private da variável admissao
    Data d = new Data();
    d.preencheData(1, 3, 2015);
    f1.setAdmissao(d);
    f1.setRg("123456");
    empresa.adicionar(f1);

    Funcionario f2 = new Funcionario();
    f2.setNome("Siclano");
    f2.setDepartamento("Conceitual Generalista");
    f2.setSalario(2000.0);
    //Data d = new Data();
    d.preencheData(1, 3, 2016);
    f2.setAdmissao(d);
    f2.setRg("123456");
    empresa.adicionar(f2);

    //imprime todos os dados disponíveis do funcionário
    empresa.getEmpregados();
  }
}
2 respostas
solução!

Oi Vinicius, tudo bom?

Provavelmente isso está acontecendo porque estamos sobrescrevendo o atributo empregados com o método set:

 Empresa empresa = new Empresa(1);
    Funcionario[] f = new Funcionario[2];

    empresa.setEmpregados(f);

Tenta usar apenas o construtor:

    Empresa empresa = new Empresa(10);

Dessa forma a quantidade de funcionarios é definida na hora da construção e depois apenas utilizamos =)

Oi André,

Valeu pela dica, funcionou mesmo. Claro que agora faz sentido, eu estava inicializando duas vezes a variável. tsc-tsc-tsc

Até