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

Error Ao compilar arquivo ex 6

Alguem poderia me ajudar nesse error que esta dando ao compilar

class Data {
    int dia = 0;
    int mes = 0;
    int ano = 0;

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

    String FormataData(){
        return dia +"/"+ mes + "/" + ano;
    }

    void mostradata(){
        System.out.print(FormataData());
    }
class Funcionario {
    String nome;
    String departamento;
    double salario;
    String rg;
    Data dataEntrada;

     void RecebeAumento(double recebeAumento, boolean validador){
        if (validador == true){
        this.salario += recebeAumento;
        }
        else{
            System.out.println("Não há aumento de valor");
        }
    }

    double CalculoGanhoAnual (){
        return this.salario * 12;
    }
}
public class TestePrograma {
    public static void main(String[] args) {
        Funcionario minhaEmpresa = new Funcionario();

        minhaEmpresa.nome = "Gabriel";
        minhaEmpresa.dataEntrada.preencheData(01,02,1996);

        System.out.println(minhaEmpresa.nome);


    }

Exception in thread "main" java.lang.NullPointerException at javaapplication5.JavaApplication5.main(JavaApplication5.java:8) C:\Users\Gabriel\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

6 respostas
solução!

dataEntrada não existe, é nulo ainda, você precisa criar(instanciar) o objeto Data para somente depois chamar um método desse objeto.

minhaEmpresa.dataEntrada.preencheData(01,02,1996);

Uma das maneiras de fazer isso, é toda vez que você criar um Funcionario, criar o objeto data também. Você pode criar o objeto data no construtor do Funcionario, assim, sempre que você tiver um funcionario, você também vai ter uma data.

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

   Funcionario(){
    dataEntrada = new Data();
 }

     void RecebeAumento(double recebeAumento, boolean validador){
        if (validador == true){
        this.salario += recebeAumento;
        }
        else{
            System.out.println("Não há aumento de valor");
        }
    }

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

Valeu meu amigo pela ajuda , deu tudo certo abraço

Ficou uma duvida, porque é necessário declarar 2 vezes as variáveis "dia, mes e ano"?

É necessário declarar dentro do método também?

class Data {
    int dia = 0;
    int mes = 0;
    int ano = 0;

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

Tecnicamente eu poderia declarar automaticamente dentro do metodo e so returna o valor ja com os dados formatados.

mas nesse caso precisei declarar fora do metodo para poder manipular os dados nos metodos

String FormataData(){ return dia +"/"+ mes + "/" + ano; }

void mostradata(){ System.out.print(FormataData()); }

Entendo, porem uma vez declarada fora, do método, por que declarar novamente dentro?

class Data {
    int dia = 0;
    int mes = 0;
    int ano = 0;

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

"this.dia" se refere a variavel fora do metodo, que se encontrar na classe e a variavel "dia" se refere a variavel que se encontra entre parentese no metodo preencheData()