Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Como usar o for novo Java 5.0

Como posso fazer o método mostraFuncionarios pelo for Java5.0?

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

    void adicionar(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(int[] funcionarios) {
        for(int x : funcionarios) {
            System.out.println("Funcionário na posição: " + x);
            System.out.println("R$" + this.funcionarios[x].salario);
        }
    }
}
11 respostas

Boa tarde amigo, não sei se consegui compreender sua duvida. Você esta com duvidas na implementação do for na seguinte sintaxe for(int x : funcionários) ou com a esta sintaxe for(int i = 0; i < this.livre; i++) ?

Se não me engano você se refere a primeira... Bom, essa forma de loop chama-se foreach que consiste em realizar a leitura da lista, jogando a cada interação o conteúdo atual para uma variável do mesmo tipo da lista e desta forma, podendo utilizar essa variável.

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

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

    //Acredito que o parâmetro seria um Array de funcionários (como foi declaro mais acima) 
    void mostraFuncionarios(Funcionario [] funcionarios) {

    //Aqui, como você esta interagindo com uma lista de funcionários, a variável tem que ser do tipo Funcionário para poder receber um funcionário da lista a cada loop.
    for(Funcionario x : funcionarios) {

           //Como o foreach não trabalha explicitamente com índices, o recomentado para você verificar a posição dos funcionários, seria criar uma variável do tipo inteiro para incrementar a cada loop
            int aux =0;
            System.out.println("Funcionário na posição: " + aux);
            //Aqui basta usar a variavel "x" que você escolheu no inicio do for pra receber o objeto da lista, assim tendo acesso a todos os atributos e métodos do funcionário atual
            System.out.println("R$" + x.salario);
        }
    }
}

Não sei se consegui te ajudar, mas, qualquer coisa basta perguntar e se possível especificar em qual parte do código você esta com dificuldade ;)

P.S.:Lembrando de adicionar ao código o aux++ ou aux = aux +1; Para saber quantas interações foram feitas ou no seu caso a posição do funcionário.

Está dando erro nessa ultima linha, não estou sabendo como colocar ela:

 void mostraFuncionarios(Funcionario[] funcionarios) {
        for(Funcionario x : funcionarios) {
            int aux = 0;
            System.out.println("Funcionário na posição: " + aux);
            this.funcionarios[x].mostra();
        }
    }
public class Funcionario {
    String nome;
    String departamento;
    double salario;
    double ganhoAnual;
    Data dataDeEntrada;

    void recebeAumento(double valor) {
        this.salario += valor; 
    }

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

    void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salário: " + this.salario);
        System.out.println("Ganho anual: " + this.calculaGanhoAnual());
        System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada() + "\n");

    } 
}
solução!

Testei aqui e funcionou. Segue codigo:

void mostraFuncionarios(Funcionario[] funcionarios) {
        int contador = 0 ;
        for (Funcionario funcionarioAtual : funcionarios) {
            contador++;
            System.out.println("Funcionário na posição: " + contador);
            System.out.println(funcionarioAtual.salario);
        }
    }

Sim, mas que usar o metodo mostra() para exibir tudo:

 void mostraFuncionarios(Funcionario[] funcionarios) {
        for(Funcionario x : funcionarios) {
            int aux = 0;
            System.out.println("Funcionário na posição: " + aux);
            this.funcionarios[x].mostra();
        }
    }

Então cara, a cada passada pelo for (interação) o x pega um novo funcionário e mostra todos os dados dele (como você fez o método mostra na classe funcionário). Basta colocarassim:

x.mostra();

no lugar de this.funcionarios[x].mostra();

Funcionou. Obrigado.

Conseguiu entender como funciona o loop? Qualquer coisa só perguntar ;)

Olá, Jair. Como eu poderia evitar o Exception que dá caso haja espaços nulos no vetor? Simplesmente com um if() continue?

Olá Breno!

O seguinte código funciona nesse caso:

if(x == null) {
    continue;
}

Abraços!