Solucionado (ver solução)
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!