Java

Bom tarde a todos estou estudando a apostila FJ-11 Java e Orientação a Objetos da Caelum na pagina 73 exercício 4 alterar o laço para o novo for do Java 5.0, até o momento não consegui ter sucesso na chamada do método. segue toda a estrutura que estou desenvolvendo para resolver o exercício.

Estou com problemas para chamar o método —> mostraempregados() da class Empresa a partir da class TestaEmpresa —> empresa.mostraEmpregados(empresa.empregados[])

Alguem pode me ajudar a consertar este código

class Empresa {

String nome;
String cnpj;
Funcionario[] empregados;
int a;
void adiciona(Funcionario f) {
    a += 1;
    this.empregados[a - 1] = f;
}

// este metodo funciona normal
/* void mostraEmpregados() {
for (int i = 0; i < this.empregados.length; i++) {
System.out.println("Funcionário na posição: " + i);
//System.out.println("Salario: " + this.empregados[i].salario);
empregados[i].mostra();
}
}
*/

// porque o metodo não consigo converter o metodo acima para
// o novo for do java 5.0
void mostraEmpregados(int[] empregados) {
for (int x : empregados) {
System.out.println(empregados[x]);
}
}

}

class TestaEmpresa {
public static void main(String[] args) {

    Empresa empresa = new Empresa();
    empresa.empregados = new Funcionario[10];
    for (int i = 0; i < 10; i++)  {
        Funcionario f = new Funcionario();
        f.salario = 1000 + i * 100;
        f.contrata();
        empresa.adiciona(f);
    }

// qual argumento devo passar aqui para solucionar o erro
empresa.mostraEmpregados(empresa.empregados[]);

}

}

class Funcionario {

String nome;
Data dataNascimento;
String cpf;
String rg;
Data dataAdimicao;
String departamento;
String cargo;
double salario;
char estaAtivo;
Data dataDemicao;

void recebeAumento(double aumento) {
    salario += aumento;
}

double calculaGanhoAnual() {
    return this.salario * 12;
}

boolean contrata() {
    if (this.estaAtivo != 'S') {
        this.estaAtivo = 'S';
        this.dataAdimicao = new Data();
        this.dataAdimicao.dia = 15;
        this.dataAdimicao.mes = 07;
        this.dataAdimicao.ano = 2016;
        this.departamento = "Elétrica";
        this.cargo = "Téc. Eletroeletrônica I";
        this.salario = 3159.19;
        this.dataDemicao = new Data();
        this.dataDemicao.dia = 0;
        this.dataDemicao.mes = 0;
        this.dataDemicao.ano = 0;
        return true;
    }
    else {
        return false;
    }
}

boolean demite() {
    if (this.estaAtivo != 'N') {
        this.estaAtivo = 'N';
        this.dataAdimicao = new Data();
        this.dataAdimicao.dia = 0;
        this.dataAdimicao.mes = 0;
        this.dataAdimicao.ano = 0;
        this.dataDemicao = new Data();
        this.dataDemicao.dia = 16;
        this.dataDemicao.mes = 07;
        this.dataDemicao.ano = 2016;
        this.departamento = "";
        this.cargo = "";
        this.salario = 0.0;
        return true;
    }
    else {
        return false;
    }
}

boolean transfFuncDepar() {
    if (this.estaAtivo == 'S' && this.departamento !="Mecânico") {
        this.departamento = "Mecânico";
        return true;
    }
    else {
        return false;
    }
}

void mostra() {
    System.out.println("Nome: " + this.nome);
    System.out.println("Departamento: " + this.departamento);
    System.out.println("Salário: " + this.salario);
    System.out.println("RG: " + this.rg);
    System.out.println("Ganho Anual: " + this.calculaGanhoAnual());
    System.out.println("Cargo/Função: " + this.cargo);
    System.out.println("Data de Adimição: " + this.dataAdimicao.formataData());
    System.out.println("Data de Demição: " + this.dataDemicao.formataData());
    

}

}

class Data {

int dia;
int mes;
int ano;

String formataData() {
    return dia + "/" + mes + "/" + ano;
}

}

Sobre o for, vc não pode atribuir um vetor de objetos para uma variável de tipo primitivo, tem que ser do mesmo tipo do vetor. e o parametro que vc está passando pro metodo mostra empregados n faz sentido, pois empregados são objetos, não inteiros, logo empregados tem que ser um vetor do tipo funcionario. dps coloca assim no for:

for(Funcionario x : empregados){
x.mostra();
}

recomendo dar uma olhada no funcionamento do ForEach

no seu metodo, o parametro deve ser assim:
void mostraEmpregados(Funcionario[] empregados)

1 curtida

Boa noite Gustavo.

Sua resposta foi de grande ajuda para a resolução do meu problema.

Realizei os ajustes que você me indicou e mais um pequeno ajuste na hora de chamar o método na class TestaEmpresa.
De empresa.mostraEmpregados(empresa.empregados[]);
Para empresa.mostraEmpregados(empresa.empregados);