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

Programa Não funciona

programa não funciona porque da null pointer!

Exception in thread "main" java.lang.NullPointerException at programa03.Funcionario.setDataDeNascimento(Funcionario.java:65) at programa03.Programa.main(Programa.java:13)

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

        Funcionario guilherme = new Funcionario ("Guilherme", "123.123.123-05");
        imagine.adicionar(guilherme);

        guilherme.setName("Guilherme de Carvalho Correia de Melo");
        guilherme.setCPF("123.123.123-50");
        guilherme.setDataDeNascimento(7, 5, 2000);
        guilherme.setDataDeAdmissao(12, 1, 2017);
        guilherme.setRG("12.132.123-55");
        guilherme.setSalario(1000.0);
        guilherme.setDepartamento("Tecnologia da Informação");

        imagine.mostrarSalario();
        imagine.mostraInformacoes();        
        boolean contem = imagine.contem(guilherme);
        System.out.println(contem);
    }
}
public class Funcionario {
    private String nome;
    private double salario;
    private String cpf;
    public Data dataDeNascimento;
    private String rg;
    private String departamento;
    public Data dataDeAdmissao;



    public Funcionario (String nomeConstrutor, String cpfConstrutor){
        nome = nomeConstrutor;
        cpf = cpfConstrutor;
    }

    //==============================================FUNÇÕES RELACIONADAS AO NOME==========================================\\
    public String setName(String nomeMetodo){
        this.nome = nomeMetodo;
        return this.nome;
    }

    public String mostrarNome(){
        return nome;
    }

    //==============================================FUNÇÕES RELACIONADAS AO SALARIO==========================================\\
    public double setSalario (double valor){
        this.salario = valor;
        return this.salario;
    }

    void aumentaSalario (double valorASerAumentado){
        this.salario += valorASerAumentado;
    }

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

    public double mostrarSalario(){
        return salario;
    }

    //==============================================FUNÇÕES RELACIONADAS AO CPF E RG==========================================\\
    public String setCPF(String cpfMetodo){
        cpf = cpfMetodo;
        return cpf;
    }

    public String setRG(String rgMetodo){
        rg = rgMetodo;
        return rg;
    }
    //==============================================FUNÇÕES RELACIONADAS A DATAS==========================================\\
    Funcionario(){
        dataDeNascimento = new Data();
        dataDeAdmissao = new Data ();
     }

    public Data setDataDeNascimento(int dia, int mes, int ano){
        dataDeNascimento.preencheData(dia, mes, ano);
        return dataDeNascimento;
    }

    public Data setDataDeAdmissao(int dia, int mes, int ano){
        dataDeAdmissao.preencheData(dia, mes, ano);
        return dataDeAdmissao;
    }

    //==============================================FUNÇÕES RELACIONADAS AO DEPARTAMENTO==========================================\\
    public String setDepartamento (String departamentoMetodo){
        this.departamento = departamentoMetodo;
        return departamento;
    }

    //==============================================FUNÇÕES RELACIONADAS A MOSTRAR OS DADOS==========================================\\
    void mostraDados () {
        System.out.println("Nome: " + this.nome);
        System.out.println("Data de Nascimento: " + this.dataDeNascimento.mostraData());
        System.out.println("CPF: " + this.cpf);
        System.out.println("RG: " + this.rg);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Data de Admissão: " + this.dataDeAdmissao.mostraData());
        System.out.println("Salario: " + this.salario);
    }
}
public class Data {
    int dia;
    int mes;
    int ano;

    public void preencheData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

    String mostraData () {
        String data = this.dia + "/" + this.mes + "/" + this.ano;
        return data;
    }
}
package programa03;

public class Empresa {
    String nome;
    String cnpj;
    Funcionario[] funcionarios;
    int i = 0;

    void adicionar(Funcionario f) {
            if(funcionarios[i]==null){
                this.funcionarios[i]=f;
            i++;
        }
    }

    void mostrarSalario() {
        for(int i = 0; i<funcionarios.length;i++){
            if(funcionarios[i]!=null){
                System.out.println(this.funcionarios[i].mostrarNome() +": "+ this.funcionarios[i].mostrarSalario());
                System.out.println("======================================");        
            }
        }
    }

    void mostraInformacoes(){
        for(int i = 0; i<funcionarios.length;i++){
            if(funcionarios[i]!=null){
                funcionarios[i].mostraDados();
                System.out.println("======================================");        
            }
        }
    }

    boolean contem (Funcionario f) {
        for(int i = 0; i<funcionarios.length; i++){
            if (f==this.funcionarios[i]){
                return true;
            }
        } 
        return false;
    }
}
3 respostas
solução!

O seu construtor do Funcionario que recebe 2 argumentos não inicializa os atributos do tipo Data.

Funcionario(){ dataDeNascimento = new Data(); dataDeAdmissao = new Data (); }

mais embaixo eu inicializo, mas vou até colocar junto.

Olá Rennan

Isso está acontecendo porque seus atributos dataDeNascimento e dataDeAdmissao não foram instanciadas.

Na sua classe Funcionario altere essas duas linhas:

  public Data dataDeNascimento;
  public Data dataDeAdmissao;

para

  public Data dataDeNascimento=new Data();
  public Data dataDeAdmissao=new Data();

Abs

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