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

Problema no método getFuncionario

Estou com erro na seguinte linha da classe TestaEmpresa: neowix.getFuncionario(0) = new Funcionario[10];

run: Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unexpected type required: variable found: value at aula3.TestaEmpresa.main(TestaEmpresa.java:6) /home/marcelo/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

package aula3;

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

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

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

    public int getCnpj() {
        return this.cnpj;
    }

    public void setCnpj(int cnpj){
        this.cnpj = cnpj;
    }

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

    public void setFuncionario(Funcionario funcionario, int posicao) {
        this.funcionarios[posicao] = funcionario;
    }

    void setAdicionar(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

    //void mostraFuncionarios() {
    //    for(int i = 0; i < this.livre; i++) {
    //        System.out.println("Funcionário na posição: " + i);
    //        System.out.println("R$" + this.funcionarios[i].salario());
    //    }
    //}

    void mostraFuncionarios(Funcionario[] funcionarios) {
        for(Funcionario x : funcionarios) {
            int aux = 0;
            System.out.println("Id: " + aux);
            x.mostra();
        }
    }

    void mostraTodasAsInformacoes() {
            for(int i = 0; i < this.livre; i++) {
            System.out.println("Id: " + i);
            this.funcionarios[i].mostra();
        }
    }

    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.funcionarios[i]) {
                System.out.println("Contem Funcionário");
            return true;
            }
        }
        return false;
    }  
}


package aula3;

public class TestaEmpresa {
    public static void main(String[] args) {
        Empresa neowix = new Empresa();
        neowix.getFuncionario(0) = new Funcionario[10];


        Funcionario f1 = new Funcionario();
        f1.setNome("Marcelo");
        f1.setDepartamento("TI");
        f1.setSalario(4000);
        f1.dataDeEntrada = new Data();
        f1.dataDeEntrada.dia = 13;
        f1.dataDeEntrada.mes = 10;
        f1.dataDeEntrada.ano = 1981;
        neowix.setAdicionar(f1);

    Funcionario f2 = new Funcionario();
        f2.setNome("Adriana");
        f2.setDepartamento("TI");
        f2.setSalario(2000);
        f2.dataDeEntrada = new Data();
        f2.dataDeEntrada.dia = 14;
        f2.dataDeEntrada.mes = 11;
        f2.dataDeEntrada.ano = 1985;
        neowix.setAdicionar(f2);


        //neowix.funcionarios[0].mostra();
        //neowix.funcionarios[1].mostra();

        //neowix.mostraFuncionarios();

        neowix.mostraTodasAsInformacoes();

        System.out.println(neowix.contem(f2));

    }  
}
5 respostas
solução!

Opa, realmente essa linha está meio atrapalhada:

neowix.getFuncionario(0) = new Funcionario[10];

Se você quer inicializaro array de funcionários da empresa com 10, você tem outras maneiras.

Criar um método setFuncionarios(Funcionario[] funcionarios), passar a quantidade no construtor da empresa e instanciar o array lá dentro, this.funcionarios = new Funcionario[quantidade].

Você ainda instanciar direto na declaração do atributo...

Funcionario[] funcionarios = new Funcionario[10].

Antes de colocar private em:

Funcionario[] funcionarios;

da classe Empresa, estava funcionando corretamente juntamente com a linha:

neowix.funcionarios = new Funcionario[10];

da classe TestaFuncionario

Tentei implementar o método abaixo mas não consegui.

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

Mais alguém sabe?

É pq antes de colocar private vc podia acessar o atributo diretamente, agora não pode mais. É justamente para isso que ele serve. Por conta disso, você precisa ir pelos caminhos que eu citei.

Consegui.