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

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

public class TesteFuncionario {
    public static void main (String [] args){

        Funcionario registro_1 = new Funcionario();

        registro_1.dataEntrada = new Date();


        registro_1.nome = "Hugo";
        registro_1.registro = "6444296266";
        registro_1.salario = 1100;
        registro_1.dataEntrada.preencheData(8,9,2015);



            //System.out.println("O primeiro funcionario chamado "+registro_1.nome+" e contem o salario de R$ "+ registro_1.salario);

            /*registro_1.recebeAumento(500);

            System.out.println("\nHugo recebeu um aumento de R$ 500");
            */

        registro_1.mostra();


            /*Funcionario registro_2 = new Funcionario();

            registro_2.nome = "Hugo";
            registro_2.registro = "6444296266";
            registro_2.salario = 1100;
            registro_2.dataEntrada = data;
            */
            /*Funcionario registro_3 = new Funcionario();

            registro_3 = registro_1;


             if (registro_1 == registro_3) {
                    System.out.println("iguais");
                } else {
                    System.out.println("diferentes");        
                }
            */



    }

}

public class Funcionario {

    String nome;
    double salario;
    Date dataEntrada;
    String registro;


    void recebeAumento(double valorAdicional){

        this.salario += valorAdicional;

    }

    double calculaGanhoAnual() {

        return this.salario * 12;

    }

    void mostra(){

        System.out.println("\nNome do funcionario : " + this.nome + 
                            "\nSalario do funcionario : " + this.salario +
                            "\nRegistro de funcionario : " + this.registro +
                            "\nGanho anual do funcionario : " + this.calculaGanhoAnual());
        System.out.println("Data de entrada  : " + this.dataEntrada.getFormatada());
        //Metodo void mostra() mostra a data de entrada que foi formatada dentro do metodo String getFormatada()


    }


}

public class Date {

    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;

    }

}

public class Empresa {

    String nome;
    String cnpj;
    Funcionario empregados[];

    int posicaoLivre = 0;

    void adiciona(Funcionario funcionario){

        this.empregados[this.posicaoLivre] = funcionario;
        this.posicaoLivre++;
    }


}

public class TesteEmpresa {

    public static void main(String[] args) {


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

                Funcionario f1 = new Funcionario();

                f1.nome = "Aniele";
                f1.salario = 1000;
                f1.dataEntrada.preencheData(1,7,2014);
                empresa.adiciona(f1);

                Funcionario f2 = new Funcionario();

                f2.nome = "Aline";
                f2.salario = 1700;
                f2.dataEntrada.preencheData(5,5,2015);
                empresa.adiciona(f2);

                empresa.empregados[0].mostra();
                empresa.empregados[1].mostra();



    }

}

Quando eu executo a classe TesteEmpresa, o seguinte erro é reportado:


Exception in thread "main" java.lang.NullPointerException
    at aula_3.TesteEmpresa.main(TesteEmpresa.java:15)

Quando comento as linhas que eu estou setando a data, o erro some.

Ai quando executo o programa de novo, o método mostra() funciona na posição[0]e mostra o funcionario f1 (aniele) corretamente e a posição[1] não é exibida. Embaixo do dados do funcionario f1 vem seguido de uma exception, segue abaixo:


Exception in thread "main" java.lang.NullPointerException
    at aula_3.Funcionario.mostra(Funcionario.java:29)
    at aula_3.TesteEmpresa.main(TesteEmpresa.java:25)

Gostaria de entender porque isso acontece.

Obrigado.

5 respostas

José, Bom dia !!

seu problema é que está instanciando a classe Date.

por mais que você tenha feito a classe com esse nome, no java também possui uma classe Date . e ele fica confuso de qual classe é a Date se a do java ou se é a sua classe.

aconselho você modificar o nome da sua classe para Data e modificar todas instancias do objeto .

assim irá funcionar .

espero ter ajudado , Bons estudos

Obrigado pela a dica Celso Theodoro Junior,

Segui a sua orientação e mudei a classe Date para Data e modifiquei todas as instâncias de Data, porém o erro persiste exatamente como eu tinha reportado.

solução!

José , Bom dia !!

você está utilizando a para rodar o programa a classe TestaEmpresa porque se for ela , em nenhum momento você inicializou a a variável Data dataEntrada , por isso que continua o erro .

Espero ter ajudado

Bom dia Celso Theodoro Junior,

Você esta correto, eu não inicializei a variável de referencia do tipo Data na classe "TesteEmpresa", e nem na classe "Funcionario". Agora está funcionando, muito obrigado pela ajuda vlw .

Como eu sei que todo funcionário tem uma data de entrada e é uma pessoa, eu posso inicializar o objeto diretamente na declaração dos atributos da classe funcionário?

package exercicioempresa;
public class Funcionario {
    Pessoa pessoa=new Pessoa();
    Data dataEntrada=new Data();
    private String departamento;
    private double salario;
    .
    .    
    .