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

Duvida no exercício 5 da aula 4 - Arrays

Pessoal, poderiam me ajudar com esta duvida? Ao executar o método mostraTodasAsInformacoes não tenho nenhum retorno no console.

Segue abaixo os métodos:

void mostraTodasAsInformacoes(){
        for (int i = 0; i < this.livre; i++) {
            if(empregado[i] == null)
                continue;
            System.out.println("Funcionario na posicao: " + i);
            this.empregado[i].mostra();
        }
void mostra(){
        for (int i = 0; i < this.livre; i++) {
            if(empregado[i] == null)
                continue;
            System.out.println("Nome: " + this.empregado[i].nome);
            System.out.println("Salario: " + this.empregado[i].salario);
            System.out.println("RG:" + this.empregado[i].rg);
            System.out.println("Departamento: " + this.empregado[i].departamento);
            System.err.println("Seu ganho anual: " + this.empregado[i].calculaGanhoAnual());
        }

E como esta minha classe TestaEmpresa:

package aula3Java1;

public class TestaEmpresa {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Empresa empresa = new Empresa();
        empresa.empregado = new Funcionario[10];

        empresa.empregado[0] = new Funcionario();
        empresa.empregado[0].nome = "Yuri";
        empresa.empregado[0].departamento = "Time";
        empresa.empregado[0].salario = 1500;
        empresa.empregado[0].rg = "12345";

        empresa.empregado[1] = new Funcionario();
        empresa.empregado[1].nome = "Marcela";
        empresa.empregado[1].departamento = "Time";
        empresa.empregado[1].salario = 1500;
        empresa.empregado[1].rg = "12345";


        /*Funcionario f2 = new Funcionario();
        f2.salario = 1700.00;
        f2.datainicio = new Data();
        empresa.adiciona(f2);*/

        //empresa.empregado[0].mostra();
        //empresa.empregado[1].mostra();
        //empresa.mostraEmpregados();
        empresa.mostraTodasAsInformacoes();

        }
    }

Desde já obrigado!!

9 respostas

Você está incrementando a variável livre depois de adicionar um novo funcionário?

Obrigado pelo questionamento Augusto, ele me ajudou a entender a necessidade da chamada do método adiciona. Agora meu desafio tem sido aplicar este método ao array de funcionários, pois antes ele estava aplicado a um funcionário que você aciona, veja meu método adiciona:

void adiciona(Funcionario f){
        for (int i = 0; i < this.livre; i++) {        
        this.empregado[this.livre] = f;
        this.livre++;        
        }
    }

Muito obrigado pela ajuda.

Olhe, seu método adiciona esta adicionando o mesmo funcionário em todos os espaços do array de 0 até o valor de livre.

Certo, entretanto mesmo atribuindo ao array de empregado não consigo retornar nada.

void adiciona(){
        for (int i = 0; i < this.livre; i++) {        
        this.empregado[this.livre] = empregado[i];
        this.livre++;        
        }
    }

Método para mostrar:

void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionario na posicao: " + i);        
            empregado[i].mostra();
        }
    }

Perdão, ainda não esta muito claro, então não estou conseguindo evoluir neste tema.

Yuri posta sua classe funcionário completa.

Outra coisa, dentro do método mostraTodasAsInformacoes da um sysout no array de empregado:

System.out.println(empregado);

A gente vai se falando

Olá Matheus, obrigado pelo suporte, segue a classe Funcionário como havia pedido:

package aula3Java1;

public class Funcionario{
    String nome; 
    String departamento;
    double salario;
    Data datainicio;
    String rg;

     void aumento(double recebeAumento){
        this.salario += recebeAumento;
    }
     double calculaGanhoAnual(){
        return this.salario * 12;
    }
     void notaPerformance(int nota){
        if(nota >= 1 && nota <= 5)
            System.out.println("Resultado esperado de comprometimento");
        else if (nota > 5)
            System.out.println("Resultado acima do esperado!" + "\nSua nota foi: " + nota);
    }
    public void mostra(){
        System.out.println();
        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("Dia:" + this.datainicio.dia);
        //System.out.println("Mes: " + this.datainicio.mes);
        //System.out.println("Ano: " + this.datainicio.ano);
        //System.out.println("Data de inicio: " + this.datainicio.getFormatada());
        System.err.println("\nGanho anual de: " + this.calculaGanhoAnual());

    }
}

Adicionei um sysout no método mostraTodasAsInformacoes porem deu mesmo retorno.

void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            this.empregado[i].mostra();
            System.out.println(empregado[i]);
        }
    }
solução!

Vamos lá cara, seu método adiciona() tem que receber um objeto do tipo Funcionário por parâmetro, e ele não precisa de um for, ele fica mais o menos assim:

void adiciona(Funcionario f){
        if(empregado[this.livre] == null) {
            this.empregado[this.livre] = f;
            this.livre ++;
        }
    }

na ultima linha do seu método mostra() tem um System.err.println, troca ele por System.out.println

na classe TestaEmpresa você tem que criar o funcionário primeiro, adicionar as informações nele, depois disso você adiciona ele no array de Empresa pelo método adiciona(Funcionario f), segue o código:

class TestaEmpresa {
    /**
     * @param args
     */
    public static void main(String[] args) {
        Empresa empresa = new Empresa();
        empresa.empregado = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.nome = "Yuri";
        f1.departamento = "Time";
        f1.salario = 1700;
        f1.rg = "12345";
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.nome = "Marcela";
        f2.departamento = "Time";
        f2.salario = 1500;
        f2.rg = "12345";
        empresa.adiciona(f2);

        empresa.mostraTodasAsInformacoes();
        }
}

aqui o código da classe Empresa:

class Empresa{

    public Funcionario[] empregado;
    private int livre = 0;

    void mostraTodasAsInformacoes(){
        for (int i = 0; i < this.livre; i++) {
            if(empregado[i] == null)
                continue;
            System.out.println("Funcionario na posicao: " + i);
            this.empregado[i].mostra();
        }
    }

    void adiciona(Funcionario f){
        if(empregado[this.livre] == null) {
            this.empregado[this.livre] = f;
            this.livre ++;
        }
    }
}

Espero ter conseguido ajudar em alguma coisa, qualquer duvida perguntar aqui de novo.

Yuri desculpe a demora para responder, andei dando uma olhada em meus códigos, eles estão exatamente do jeito que o Filipe postou, copie o código dele que irá resolver seu problema.

Caso não resolva a gente vai se falando.

Pessoal, muito obrigado pela ajuda mais uma vez. O problema foi de fato no método para adicionar um novo funcionário. Fiz um teste agora e correu tudo como certo. Grande abraço.