3
respostas

Modificadores de Acesso exercicio 4

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

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

    void mostraEmpregados() {
         for (int idx = 0; idx < this.livre; idx++) {
              System.out.println("Funcionário na posição: " + idx);
              System.out.println("idFuncionario: "  + this.empregados[idx].idFuncionario);                         
              System.out.println("idFuncionario: "  + id);                         
              System.out.println("departamento : "  + this.empregados[idx].departamento);                        
              System.out.println("nome         : "  + this.empregados[idx].nome);
              System.out.println("cpf          : "  + this.empregados[idx].cpf);              

              System.out.println("Salario R$" + this.empregados[idx].salario);

            };
    };
    void mostraTodasAsInformacoes() {
         for (int i = 0; i < this.livre; i++) {
              System.out.println("Funcionário na posição: " + i);
              this.empregados[i].mostra();
        };
    };  

    boolean contem(Funcionario f) {
            for (int i = 0; i < this.livre; i++) {
                if (f == this.empregados[i]) {
                    return true;
                };
            };
            return false;
        }; 

    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];
    };       
};

esta dando erro de compilação.

C:\Caca\Alura\CursoJava\JavaIPrimeirosPassos\programas>javac Empresa.java Empresa.java:17: error: ';' expected id.idFuncionario = this.empregados[idx].idFuncionario); ^ 1 error

C:\Caca\Alura\CursoJava\JavaIPrimeirosPassos\programas>javac Empresa.java Empresa.java:17: error: idFuncionario has private access in Funcionario id.idFuncionario = (this.empregados[idx].idFuncionario); ^ Empresa.java:17: error: idFuncionario has private access in Funcionario id.idFuncionario = (this.empregados[idx].idFuncionario); ^ Empresa.java:19: error: departamento has private access in Funcionario System.out.println("departamento : " + this.empregados[idx].departamento); ^ Empresa.java:20: error: nome has private access in Funcionario System.out.println("nome : " + this.empregados[idx].nome); ^ Empresa.java:21: error: cpf has private access in Funcionario System.out.println("cpf : " + this.empregados[idx].cpf);

3 respostas

Sua classe Funcionario provavelmente está com idFuncionario como privado, o que faz esse erro ser o esperado. A partir de agora, em vez de fazer algo como this.empregados[idx].idFuncionario, você precisará "pedir" o id. Algo como this.empregados[idx].getIdFuncionario()

Luis, também tenho duas observações sobre boas práticas pra você:

  • apesar do java aceitar ponto-e-virgula extras em qualquer lugar, não se utiliza no final de declaração de um método, como é costume em outras linguagens

  • o nome do atributo idFuncionario está muito explicativo sem necessidade. Se você está dentro da classe Funcionario, basta o atributo se chamar id que já fica claro suficiente que esse id é de um funcionário

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

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

    void mostraEmpregados() {
         for (int idx = 0; idx < this.livre; idx++) {
              System.out.println("Funcionário na posição: " + idx);
//            System.out.println("idFuncionario: "  + this.empregados[idx].idFuncionario);                         
//            System.out.println("departamento : "  + this.empregados[idx].departamento);                        
//            System.out.println("nome         : "  + this.empregados[idx].nome);
//            System.out.println("cpf          : "  + this.empregados[idx].cpf);  
//            System.out.println("Salario R$" + this.empregados[idx].salario);              
              System.out.println("idFuncionario: "  + this.empregados[idx].getIdFuncionario());                         
              System.out.println("departamento : "  + this.empregados[idx].getDepartamento());                        
              System.out.println("nome         : "  + this.empregados[idx].getNome());
              System.out.println("cpf          : "  + this.empregados[idx].getCpf());              

              System.out.println("Salario R$" + this.empregados[idx].getSalario());

            };
    };
    void mostraTodasAsInformacoes() {
         for (int i = 0; i < this.livre; i++) {
              System.out.println("Funcionário na posição: " + i);
              this.empregados[i].mostra();
        };
    };  

    boolean contem(Funcionario f) {
            for (int i = 0; i < this.livre; i++) {
                if (f == this.empregados[i]) {
                    return true;
                }
            }
            return false;
        } 

    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];
    }       
};
----
class AtualizaEmpresa {
   public static void main (String[] args) {
       Empresa empresa = new Empresa();
       empresa.empregados = new Funcionario[10];

       AtualizaFuncionario.main(new String[]{});      

// assim
//     Funcionario f1 = new Funcionario();
//     f1.salario = 1000;
//     f1.dataEntrada = new DataFuncionario();
//     empresa.adiciona(f1);

//     Funcionario f2 = new Funcionario();
//     f2.salario = 1700;
//     f2.dataEntrada = new DataFuncionario();
//     empresa.adiciona(f2);
 //ou assim
       for (int idx = 0; idx < 5; idx++) {
           Funcionario f = new Funcionario();
//         f.salario = (1000 + (idx * 100));
           f.setSalario(1000 + (idx * 100));
           empresa.adiciona(f);
      };


      Funcionario f = new Funcionario();
//    f.idFuncionario = 1;
      f.setIdFuncionario(1);
      boolean existe = empresa.contem(f);
      if (existe) {
           System.out.println("Funcionario ja existe");
          } 
     else {
           System.out.println("Funmcionario não existe");
          };



//

//     empresa.empregados[0].mostra();
//     empresa.empregados[1].mostra();
       empresa.mostraEmpregados();
       empresa.mostraTodasAsInformacoes();
      };
};

Tudo bem entendi, porem surgiu outra duvida na Classe Empresa a variavel "private Funcionario[] empregados;" é do tipo array...neste caso como faço para utilizar esta variavel na classe AtualizaEmpresa ??

Boa pergunta. Você vai precisar também de métodos na classe Empresa. Por exemplo, você vai precisar de um método buscaEmpregado, que recebe um int posicao e devolve empregados[posicao]. Aí, da classe "de fora", você vai fazer empresa.buscaEmpregado(0).mostra().

Com prática, isso se tornará automático!