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

Dúvida na impressão

Fiz o que foi pedido no exercício, compilou porém na hora de imprimir está mostrando um funcionário a mais e não sei o que fiz de errado no meu código. Segue meu código:

class Data{
    int dia;
    int mes;
    int ano;
    void preencheData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia+"/"+this.mes+"/"+this.ano;
    }
}

class Funcionario{
    String nome;
    String departamento;
    double salario;
    Data dataEntrada;
    String rg;

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

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

    void mostra(){
        System.out.println("Nome: "+this.nome);
        System.out.println("Departamento: "+this.departamento);
        System.out.println("Salario: "+this.salario);
        System.out.println("Data da entrada: "+dataEntrada.getFormatada());
        System.out.println("R.G: "+this.rg);
        System.out.println("Ganho anual: "+this.calculaGanhoAnual()+"\n\n");
    }
}

class Empresa{
    String nome;
    String cnpj;    
    Funcionario[] funcionarios;
    int k=0; //auxiliar

    void adiciona(Funcionario func){
        this.funcionarios[this.k] = func;
        this.k++;
    }
    void mostraEmpregados() {
        for (int i = 0; i < this.funcionarios.length; i++) {
            System.out.println("Funcionário na posição: " + i);
            // preencher para mostrar outras informacoes do funcionario
            System.out.println("Nome: "+this.funcionarios[i].nome);
            System.out.println("Salario: "+this.funcionarios[i].salario);
            System.out.println("Ganho anual: "+this.funcionarios[i].calculaGanhoAnual()+"\n\n");
        }
    }

}

class TestaEmpresa{
    public static void main(String[] args) {
        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];

        for (int i = 0; i < 5; i++) {
            empresa.funcionarios[i] = new Funcionario();
            empresa.funcionarios[i].salario = 1000 + i * 100;
            empresa.adiciona(empresa.funcionarios[i]);
        }
        empresa.mostraEmpregados();
    }
}

Obs: Quando mostra o funcionário a mais, logo depois de imprimira posição dele mostra a mensagem de erro:

Exception in thread "main" java.lang.NullPointerException
        at Empresa.mostraEmpregados(Programa.java:56)
        at TestaEmpresa.main(Programa.java:74)
4 respostas
solução!

Já achei o meu erro, no for do método mostraEmpregados eu coloquei pra pesquisar pelo tamanho do funcionário, sabendo que eu estava usando o 'k' como contador e poderia utilizá-lo na hora de colocar o for. Ao mudar essa informação a impressão veio corretamente.

Oi Leonardo,

Você poderia me mostrar toda a resposta?(Incluindo a lista de funcionários)

Percebi um detalhe no seu código, mas com a lista vai ficar mais fácil de explicar ;)

Isso

Você inseria duas vezes no seu array.

empresa.funcionarios[i] = new Funcionario();

e em

 this.funcionarios[this.k] = func;

Lucas, segue meu código depois que o corrigi.

class Data{
    int dia;
    int mes;
    int ano;
    void preencheData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia+"/"+this.mes+"/"+this.ano;
    }
}

class Funcionario{
    String nome;
    String departamento;
    double salario;
    Data dataEntrada;
    String rg;

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

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

    void mostra(){
        System.out.println("Nome: "+this.nome);
        System.out.println("Departamento: "+this.departamento);
        System.out.println("Salario: "+this.salario);
        System.out.println("Data da entrada: "+dataEntrada.getFormatada());
        System.out.println("R.G: "+this.rg);
        System.out.println("Ganho anual: "+this.calculaGanhoAnual()+"\n\n");
    }
}

class Empresa{
    String nome;
    String cnpj;    
    Funcionario[] funcionarios;
    int k=0; //auxiliar

    void adiciona(Funcionario func){
        this.funcionarios[this.k] = func;
        this.k++;
    }
    void mostraEmpregados() {
        for (int i = 0; i < this.k; i++) {
            System.out.println("Funcionário na posição: " + i);
            // preencher para mostrar outras informacoes do funcionario
            System.out.println("Nome: "+this.funcionarios[i].nome);
            System.out.println("Salario: "+this.funcionarios[i].salario);
            System.out.println("Ganho anual: "+this.funcionarios[i].calculaGanhoAnual()+"\n\n");
        }
    }
    void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.k; i++) {
            this.funcionarios[i].mostra();
        }
    }   

    boolean contem(Funcionario f){
        for (int i = 0; i < this.k; i++) {
            if (f == this.funcionarios[i]) {
                return true;
            }
        }
        return false;
    }
}

class TestaEmpresa{
    public static void main(String[] args) {
        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];

        for (int i = 0; i < 5; i++) {
            empresa.funcionarios[i] = new Funcionario();
            empresa.funcionarios[i].salario = 1000 + i * 100;
            empresa.adiciona(empresa.funcionarios[i]);
        }
        empresa.mostraEmpregados();
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software