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

Dúvida no Ex. 4 da Aula 4 - Arrays

Preciso de ajuda, porque está retornando o resultado como Null? Me expliquem o que estou fazendo de errado. Obrigado.

CÓDIGO

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

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

    void aumento(double valorDeAumento){
        this.salario += valorDeAumento;
    }

    void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salário: " + this.salario);
        System.out.println("Dia: " + this.entrada.dia);
        System.out.println("Mês: " + this.entrada.mes);
        System.out.println("Ano: " + this.entrada.ano);
        System.out.println("Data de entrada: " + this.entrada.getFormatada());
        System.out.println("RG: " + this.rg);
    }
}

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 Empresa {
        String nome;
        String CNPJ;
        Funcionario[] empregados;
        int livre = 0;

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

        void mostraEmpregados() {
            for (int i = 0; i < this.livre; i++) {
                System.out.println("Funcionário na posição: " + i);
                System.out.println("R$" + this.empregados[i].salario);
            }
        }

 }

 class TesteFuncionario {
    public static void main(String[] args) {
    Funcionario f1 = new Funcionario();
    f1.nome = "Felipe";
    f1.departamento = "Marketing";
    f1.salario = 200;
    f1.entrada = new Data();
    f1.entrada.preencheData(10, 10, 2010);
    f1.rg = "123456789";
    f1.mostra();




    Funcionario f2 = new Funcionario();
    f2.nome = "Felipe";
    f2.departamento = "Marketing";
    f2.salario = 200;
    f2.entrada = new Data();
    f2.entrada.preencheData(10, 10, 2010);
    f2.rg = "123456789";
    f2.mostra();


    if(f1 == f2) {
        System.out.println("iguais");
    } else {
        System.out.println("diferentes");

}
}
}

        class TestaEmpresa {

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

                Funcionario f1 = new Funcionario();
                f1.salario = 1000;
                empresa.adiciona(f1);

                Funcionario f2 = new Funcionario();
                f2.salario = 1700;
                empresa.adiciona(f2);

                empresa.empregados[0].mostra();
                empresa.empregados[1].mostra();
                empresa.mostraEmpregados();
            }
        }
2 respostas
solução!

Felipe,

eu editei sua mensagem para dar destaque ao seu código.

O problema é o seguinte, a data de entrada do seu Funcionario é um objeto e para ser utilizada deve ser inicializada (entrada = new Data()).

Como você não fez isso a referência do objeto ainda é nula e ocorre o problema de NullPointerException.

Inicialize a variável igual você fez na classe TestaFuncionario que vai resolver.

Bons estudos.

Muito obrigado minha ajuda. Me esclareceu não só a dúvida, mas agora entendi todo processo que estava esquecendo.