[Resolvido] Exercicio FJ-11 5.5 PARTE 4

Galera, estou aqui de novo, penando muito. rs

Seguinte, estou fazendo o exercicio de array da apostila FJ-11 da Caelum.

Vou passar o código que eu fiz e depois minhas dúvidas.

Essa é a classe Empresa;

public class Empresa {

    String nomedaempresa;
    String cnpj;
    Funcionario[] empregados;
    static int contador = 0;

    void adiciona(Funcionario f) {
        if (contador < 10) {
            this.empregados[contador++] = f;
        }
        System.out.println("Funcionario: " + contador);
    }

    void mostraEmpresa() {
        for (int i = 0; i < empregados.length; i++) {
            System.out.println("Total de empregados: " + i);
        }
    }
}

A classe funcionario;

public class Funcionario {

    String nome;
    String departamento;
    double salario;
    String rg;
    boolean trabalhaAtual;
    Data dataAdmis;

    void bonifica(double quantidade) {
        double novoSalario = this.salario + quantidade;
        this.salario = novoSalario;
    }


    void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario: " + this.salario);
        System.out.println("Rg: " + this.rg);
        System.out.println("Data Admissão: dia " + this.dataAdmis.dia);
        System.out.println("Data Admissão: mes " + this.dataAdmis.mes);
        System.out.println("Data Admissão: ano " + this.dataAdmis.ano);
    }
}

E finalmente a classe main para execução;

public class TestaEmpresa {

    public static void main(String[] args) {

        Empresa empresa = new Empresa();
        empresa.nomedaempresa = "Metalurgica";
        empresa.cnpj = "9849846-165";

        empresa.empregados = new Funcionario[3];

        System.out.println("*********************************");

        Funcionario funcionario1 = new Funcionario();
        empresa.adiciona(funcionario1);
        funcionario1.nome = "vinicius";
        funcionario1.rg = "35464651";
        funcionario1.salario = 9849.65;
        funcionario1.departamento = "TI";
        funcionario1.bonifica(1000.65);
        funcionario1.trabalhaAtual = true;
        funcionario1.dataAdmis = new Data();
        funcionario1.dataAdmis.mes = 12;
        funcionario1.dataAdmis.ano = 2008;
        funcionario1.dataAdmis.dia = 13;
        funcionario1.mostra();


        System.out.println("*********************************");

        Funcionario funcionario2 = new Funcionario();
        empresa.adiciona(funcionario2);
        funcionario2.nome = "aluno";
        funcionario2.rg = "9846";
        funcionario2.salario = 49.65;
        funcionario2.departamento = "aula";
        funcionario2.bonifica(650.65);
        funcionario2.trabalhaAtual = false;
        funcionario2.dataAdmis = new Data();
        funcionario2.dataAdmis.mes = 8;
        funcionario2.dataAdmis.ano = 2007;
        funcionario2.dataAdmis.dia = 17;
        funcionario2.mostra();


        System.out.println("*********************************");

        Funcionario funcionario3 = new Funcionario();
        empresa.adiciona(funcionario3);
        funcionario3.nome = "xxx";
        funcionario3.rg = "d98498";
        funcionario3.salario = 9999.65;
        funcionario3.departamento = "lab";
        funcionario3.bonifica(333.65);
        funcionario3.trabalhaAtual = true;
        funcionario3.dataAdmis = new Data();
        funcionario3.dataAdmis.mes = 8;
        funcionario3.dataAdmis.ano = 2007;
        funcionario3.dataAdmis.dia = 17;
        funcionario3.mostra();


        System.out.println("*********************************");

        empresa.mostraEmpresa();

    }
}

Aqui está o exercício, eu realmente estou tendo dificuldade em resolver, eu até entendi o enunciado mas não sei como utilizar as funções, podem me ajudar?


  1. Percorra o atributo empregados da sua instância da Empresa e imprima o salários de todos seus funcionários.
    Para fazer isso, você pode criar um método chamado mostraEmpregados dentro da classe Empresa:
        void mostraEmpregados() {
             for (int i = 0; i < this.empregados.length; i++) {
                 System.out.println("Funcionário na posição: " + i);
                 // preencher para mostrar o salário!!
             }
        }
   ...

Cuidado ao preencher esse método: alguns índices do seu array podem não conter referência para um
Funcionario construído, isto é, ainda se referirem para null. Se preferir, use o for novo do java 5.0.
Aí, através do seu main, depois de adicionar alguns funcionários, basta fazer:
empresa.mostraEmpregados();
(opcional) Em vez de mostrar apenas o salário de cada funcionário, você pode chamar o método mostra()
de cada Funcionario da sua array.


Grato desde já.

olá amigo,

Para acessar um determinado elemento no array basta fazer o nome do array com o índice a ser pesquisado entre "[]"
Logo o seu código poderia ser assim:

void mostraEmpregados() { for (int i = 0; i < this.empregados.length; i++) { if ( this.empregados[ i ] == null ){ //1 continue; } System.out.println("Funcionário na posição: " + i + " salário: " + this.empregados[ i ].salario ); //2 // preencher para mostrar o salário!! } }

edicao: ops… esqueci de por a tag code… rs :oops:

Em 1… nós fizemos um teste para verificar se existia um funcionário na posição representada por i. Quando um array é inicializado… seus items recebem o valor padrão, no seu caso, estará armazenando Funcionario de forma que o valor padrão para objetos é null. Assim… .se você não chegar a preencher todos os items do seu array algum deles eles serão nulo.

Em 2… Para imprimir o salário basta acessar a sua variavel, ou utilizar um método get (caso exista)…

[quote=eberson_oliveira]olá amigo,

Para acessar um determinado elemento no array basta fazer o nome do array com o índice a ser pesquisado entre "[]"
Logo o seu código poderia ser assim:

void mostraEmpregados() {  
  for (int i = 0; i < this.empregados.length; i++) {  
     if ( this.empregados[ i ] == null ){ //1
        continue;
     }
     System.out.println("Funcionário na posição: " + i + " salário: " + this.empregados[ i ].salario );  //2
         // preencher para mostrar o salário!!  
     }  
} 

edicao: ops… esqueci de por a tag code… rs :oops:

Em 1… nós fizemos um teste para verificar se existia um funcionário na posição representada por i. Quando um array é inicializado… seus items recebem o valor padrão, no seu caso, estará armazenando Funcionario de forma que o valor padrão para objetos é null. Assim… .se você não chegar a preencher todos os items do seu array algum deles eles serão nulo.

Em 2… Para imprimir o salário basta acessar a sua variavel, ou utilizar um método get (caso exista)… [/quote]

Cara, muito bom, funcionou, eu tava ralando aqui ferozmente.

Grato ai pela ajuda.

Outra duvida dentro do mesmo exercício.

Nesse VOID feito para a impressão da array eu gostaria que imprimisse o VOID de outra classe, por exemplo

void mostraEmpresa() {
        for (int i = 0; i < this.empregados.length; i++) {
            if (this.empregados[i] == null) { //1
                continue;
            }
            System.out.println("Funcionário na posição: " + i + " salário: " + this.empregados[i].salario);

        }
    }

Eu gostaria desde inserir apenas a impressão de salario:

 System.out.println("Funcionário na posição: " + i + " salário: " + this.empregados[i].salario);

Que saisse um void de outra classe:

 void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario: " + this.salario);
        System.out.println("Rg: " + this.rg);
        System.out.println("Data Admissão: dia " + this.dataAdmis.dia);
        System.out.println("Data Admissão: mes " + this.dataAdmis.mes);
        System.out.println("Data Admissão: ano " + this.dataAdmis.ano);
    }

Lembrando, esse void mostra() esta em outra classe.

Valeu.

Isso?

[code]void mostraEmpresa() {
for (int i = 0; i < this.empregados.length; i++) {
if (this.empregados[i] == null) { //1
continue;
}

               this.empregados[i].mostra());   

    }   
}[/code] 

Se seu método mostra() for da classe Empregados cujo nome do array isso irá funcionar…

[quote=evertonsilvagomesjava]Isso?

[code]void mostraEmpresa() {
for (int i = 0; i < this.empregados.length; i++) {
if (this.empregados[i] == null) { //1
continue;
}
System.out.println(“Funcionário na posição: " + i +” " + this.empregados[i].mostra());

    }   
}[/code] 

Se seu método mostra() for da classe Empregados cujo nome do array isso irá funcionar…[/quote]

Eu fiz o teste e não funcionou, eu tinha tentado exatamente assim por intuição mas informa que não se deve usar um void dessa maneira no NetBeans.

ops foi mal, eh pq vc ta inserindo um metodo void() que nao tem retorno dentro do System.out.println, faz assim:

[code]void mostraEmpresa() {
for (int i = 0; i < this.empregados.length; i++) {
if (this.empregados[i] == null) { //1
continue;
}

       this.empregados[i].mostra());     
 
    }     
}  

[/code]

[quote=evertonsilvagomesjava]ops foi mal, eh pq vc ta inserindo um metodo void() que nao tem retorno dentro do System.out.println, faz assim:

[code]void mostraEmpresa() {
for (int i = 0; i < this.empregados.length; i++) {
if (this.empregados[i] == null) { //1
continue;
}

       this.empregados[i].mostra());     
 
    }     
}  

[/code][/quote]

Ae brow, funcionou, valeu mesmo.

Não tinha pensando nisso, rs, e é obvio.

Abraço

Belezaaa brother, qualquer dúvida fala aê =D