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

Array - exercicio 4

class AtualizaFuncionario {

    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
        //Funcionario f2 = f1;
        f1.idFuncionario = 0001; // atributo da classe funcionario
        f1.departamento  = "Informatica"; 

//      f1.dataEntrada   = "20/12/2016";  
        f1.dataEntrada   = new DataFuncionario();
        f1.dataEntrada.preencheData(20, 12, 2016);

        f1.salario       = 1000;      
        f1.recebeAumento(500); //metodo da classe Funcionario

        f1.nome.nomeFuncionario = "Joao das Coves";  // attributos da Classe DadosFuncionario
        f1.cpf.cpfFuncionario   = "001.002.003.004-05"; 
        f1.rg.rgFuncionario     = "7.123.256";  

        f1.rua.ruaEndereco       = "Rua do Sobe e Desce"; //Attributos  da classe Endereco
        f1.bairro.bairroEndereco = "Nuinca Aoparece";
        f1.cidade.cidadeEndereco = "Claraval";
        f1.estado.estadoEndereco = "MG";
        f1.cep.cepEndereco       = "123456000";   

        f2.idFuncionario = 0002; // atributo da classe funcionario
        f2.departamento  = "Informatica 2"; 
//      f2.dataEntrada   = "20/11/2016"; 
        f2.dataEntrada   = new DataFuncionario();
        f2.dataEntrada.preencheData(20, 11, 2016);        


        f2.salario       = 2000;      
        f2.recebeAumento(600); //metodo da classe Funcionario

        f2.nome.nomeFuncionario = "Luis das Coves";  // attributos da Classe DadosFuncionario
        f2.cpf.cpfFuncionario   = "006.007.008.009-10"; 
        f2.rg.rgFuncionario     = "8.123.256";  

        f2.rua.ruaEndereco       = "Rua do Sobe e Desce 2"; //Attributos  da classe Endereco
        f2.bairro.bairroEndereco = "Nuinca Aoparece 2";
        f2.cidade.cidadeEndereco = "Claraval 2";
        f2.estado.estadoEndereco = "MG";
        f2.cep.cepEndereco       = "123456000";   

//      if (f1 == f2) {
//          System.out.println("iguais");
//      } else {
//          System.out.println("diferentes");        
//      } 
//       
//      System.out.println("salario atual:" + f1.salario);
//      System.out.println("ganho anual:" + f1.calculaGanhoAnual());
        f1.mostra();
        f2.mostra();
    }    
}

--------
// isto é um objeto                                                                                                                     
class Funcionario {                                                                                                                           
    int    idFuncionario;                                                                                                                         
    String departamento;
//  String dataEntrada;
    DataFuncionario   dataEntrada; //DataFuncionario vem da classe DataFuncionario
    double salario;                                                                                                                       

    DadosFuncionario nome = new DadosFuncionario();
    DadosFuncionario cpf  = new DadosFuncionario();
    DadosFuncionario rg   = new DadosFuncionario();

    Endereco         rua    = new Endereco();   
    Endereco         bairro = new Endereco();
    Endereco         cidade = new Endereco();
    Endereco         estado = new Endereco();
    Endereco         cep    = new Endereco();   

   // método recebe aumento
   void recebeAumento(double valorAumento) {                                                                                                   
        this.salario += valorAumento; 
    };  

   //método calcula ganho anual
   // este metodo não pode ser void porque precisa retornar parametro.    
   double calculaGanhoAnual() {
          double salarioAnual = this.salario * 12;
          return salarioAnual;   
    };

    void mostra() {
         System.out.println("idFuncionario: "  + this.idFuncionario);                         
         System.out.println("departamento : "  + this.departamento);                        
         System.out.println("dataEntrada  : "  + this.dataEntrada);                        
         System.out.println("salario      : "  + this.salario);                        

//       System.out.println("nome         : "  + this.nome);
//       System.out.println("cpf          : "  + this.cpf);
//       System.out.println("rg           : "  + this.rg);
//                                               
//       System.out.println("rua          : "  + this.rua);
//       System.out.println("bairro       : "  + this.bairro);
//       System.out.println("cidade       : "  + this.cidade);
//       System.out.println("estado       : "  + this.estado);
//       System.out.println("cep          : "  + this.cep);

         System.out.println("nome         : "  + nome.nomeFuncionario);
         System.out.println("cpf          : "  + cpf.cpfFuncionario);   
         System.out.println("rg           : "  + rg.rgFuncionario);    

         System.out.println("rua          : "  + rua.ruaEndereco);      
         System.out.println("bairro       : "  + bairro.bairroEndereco);
         System.out.println("cidade       : "  + cidade.cidadeEndereco);
         System.out.println("estado       : "  + estado.estadoEndereco);
         System.out.println("cep          : "  + cep.cepEndereco);      


         System.out.println("salario atual: " + this.salario);          
         System.out.println("ganho anual:   " + this.calculaGanhoAnual());

         System.out.println("Dia: " + this.dataEntrada.diaDataFuncionario);
         System.out.println("Mês: " + this.dataEntrada.mesDataFuncionario);
         System.out.println("Ano: " + this.dataEntrada.anoDataFuncionario);

         System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
    };          
}; 

-----
class Empresa {
    Funcionario[] empregados;
    String cnpj;
    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);

            }
    };    
}
-----------------
class AtualizaEmpresa {
   public static void main (String[] args) {
       Empresa empresa = new Empresa();
       empresa.empregados = new Funcionario[10];

// 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));
           empresa.adiciona(f);
      };

//

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

Quando executo AtualizaFuncionario, é listado todos os funcionario inseridos, se na sequencia eu chamar AtualizaEmpresa apenas o salario é demonstrado corretamente....onde esta o erro ??

C:\Caca\Alura\CursoJava\JavaIPrimeirosPassos\programas>java AtualizaEmpresa Funcionário na posição: 0 idFuncionario: 0 departamento : null nome : DadosFuncionario@15db9742 cpf : DadosFuncionario@6d06d69c Salario R$1000.0 Funcionário na posição: 1 idFuncionario: 0 departamento : null nome : DadosFuncionario@7852e922

5 respostas

O seu atualiza funcionário cria novos objetos do tipo Funcionário, porém em nenhum momento você adiciona esses objetos ao array de Funcionários dentro de Empresa, por isso quando chama atualizaEmpresa nada acontece. Além disso cada um tem um main separado, dessa forma se eu executo o main de AtualizaFuncionario e depois o main de AtualizaEmpresa os objetos criados do primeiro já não existem mais.

Como eu faço para chamar a classe AtualizaFunncionario dentro da classe AtualizaEmpresa

O que você precisa é atualizar os funcionário de dentro da empresa, então toda essa lógica

Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
        //Funcionario f2 = f1;
        f1.idFuncionario = 0001; // atributo da classe funcionario
        f1.departamento  = "Informatica"; 

//      f1.dataEntrada   = "20/12/2016";  
        f1.dataEntrada   = new DataFuncionario();
        f1.dataEntrada.preencheData(20, 12, 2016);

        f1.salario       = 1000;      
        f1.recebeAumento(500); //metodo da classe Funcionario

        f1.nome.nomeFuncionario = "Joao das Coves";  // attributos da Classe DadosFuncionario
        f1.cpf.cpfFuncionario   = "001.002.003.004-05"; 
        f1.rg.rgFuncionario     = "7.123.256";  

        f1.rua.ruaEndereco       = "Rua do Sobe e Desce"; //Attributos  da classe Endereco
        f1.bairro.bairroEndereco = "Nuinca Aoparece";
        f1.cidade.cidadeEndereco = "Claraval";
        f1.estado.estadoEndereco = "MG";
        f1.cep.cepEndereco       = "123456000";

precisa virar um método estático dentro da classe Atualiza Funcionário

public static void atualiza(Funcionário funcionário){}

dessa forma em vez de fazer um new Funcionário você pode usar o funcionário recebido como parâmetro. Assim basta chamar o método para cada funcionário dentro da classe Atualiza Empresa.

class AtualizaFuncionario {
  public static void atualiza(Funcionario funcionario){ 
 Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
        f1.setIdFuncionario(0001); // atributo da classe funcionario
.. outros comandos...
};

// não compila da erro
class AtualizaEmpresaFunc{
   public static void main (String[] args) {
       Empresa empresa = new Empresa();
       empresa.empregados = new Funcionario[10];

       //
       AtualizaFuncionario();       
  };
};

a classe AtualizaEmpresa não compila da erro.... C:\Caca\Alura\CursoJava\JavaIPrimeirosPassos\programas>javac AtualizaEmpresaFunc.java AtualizaEmpresaFunc.java:8: error: cannot find symbol AtualizaFuncionario(); ^ symbol: method AtualizaFuncionario() location: class AtualizaEmpresaFunc 1 error

C:\Caca\Alura\CursoJava\JavaIPrimeirosPassos\programas>

solução!

Então, agora você têm uma classe que tem um método que executa sua lógica, então você tem duas formas de chamar esse método: criar um objeto e chamando o método ou, como o método é estático, chamar direto AtualizaFuncionario.atualiza(empresa.empregados[0]); por exemplo.

Mas já que vai querer para todos pode passar a empresa e percorrer o array dentro do método.