I can not compile my program because, I have an error that says "NullPointerException" [duplicate]

-1

I'm trying to build a Java project based on the concepts of object-oriented programming.

However the compiler (ECLIPSE) has an error in the line of my liigar function. It says it has a NullPointerException error. Searching the internet I saw that this is when the variable is "non-initialized". I checked my program and got a default value that I put for the varable as a "false". I wish I could understand why the eclipse is accusing this error.

In this class I put the main:

public class TestaCarro {   

public static void main(String[] args){

    Carro meuCarro = new Carro();

        meuCarro.setCor("Azul");

        meuCarro.setModelo("Gol");
        // ligando o carro
        meuCarro.ligar();
        // Acelerando o carro
        meuCarro.acelerar(80);
        // Obtendo a marcha atual
        int marchaAtual = meuCarro.obtemMarcha();

        // Imprimindo informações sobre o carro e o estado dos atributos
        System.out.print("Meu " + meuCarro.getModelo() + " " + meuCarro.getCor() + " ");
        System.out.print("Está andando na marcha " + marchaAtual + " a ");
        System.out.print(meuCarro.getVelocidadeAtual() + " Km/h!!!");

        // Parando o carro
        meuCarro.parar();

        // Acelerando o carro novamente
        meuCarro.acelerar(20);
        // Obtendo a marcha atual novmente
        marchaAtual = meuCarro.obtemMarcha();

        // Imprimindo(novamente) informações sobre o carr e o estado dos atributos
        System.out.print("Agora, meu " + meuCarro.getModelo() + " " + meuCarro.getCor() + " ");
        System.out.print(" está andando na marcha " + marchaAtual + " a ");
        System.out.println(meuCarro.getVelocidadeAtual() + " Km/h!!!");

        // Parando o carro
        meuCarro.parar();

        // Desligando o carro
        meuCarro.desligar();
    }
}

In this class I have the first function to call:

public class Carro {
    private String cor, modelo;// get e set
    private int velocidadeAtual;// Apenas get
    private double velocidadeMaxima = 140;// Definido por default + get
    private Motor motor; // get e set

    // Método para ligar o carro
    public void ligar() {
        if (this.motor.ligar())
            System.out.println("O carro está sendo ligado...");
    }

    // Método para parar o carro
    public void parar() {
        System.out.println("Parando o carro...");
        this.velocidadeAtual = 0;
    }

    // Método para desligar o carro
    public void desligar() {
        if (this.motor.desligar()) {
            System.out.println("O carro está sendo desligado...");
        } else {
            System.out.println("Não há como desligar um carro em movimento.");
        }
    }

    // Métodos get, set, acelerar, obterMarcha...
    public String getCor() {
        return cor;
    }

    public void setCor(String cor) {
        this.cor = cor;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public Motor getMotor() {
        return motor;
    }

    public void setMotor(Motor motor) {
        this.motor = motor;
    }

    public double getVelocidadeAtual() {
        return velocidadeAtual;
    }

    public double getVelocidadeMaxima() {
        return velocidadeMaxima;
    }
    //Método qued devolve a marcha em que o carro está.
    public void acelerar(double velocidade){
        this.velocidadeAtual+=velocidade;
    }
// Método que devolve a marcha em que o carro está

        public int obtemMarcha() {

         if(this.velocidadeAtual<=0) {
            return -1;
        }
        else {
              if(this.velocidadeAtual<=20) {
                return 1;
        }
        else {
              if(this.velocidadeAtual<=40) {
                return 2;
            }
            else {
                  if(this.velocidadeAtual<=60) {
                    return 3;
                }
                else {
                      if(this.velocidadeAtual<=80) {
                            return 4;
                        }
                         else {
                            return 5;
                         }

                }
            }
        }
    }
}

}

Now I initialize in this other class the connect function:

public class Motor {

    private double potencia;// get e set
    private String tipoDeCombustivel;// get set
    private boolean ligado = false;// is e set

    public boolean ligar() {
        this.ligado = true;
        System.out.println("Ligando o motor...");
        return true;
    }

    public boolean desligar() {
        this.ligado = false;
        System.out.println("Desligando o motor..");
        return true;
    }

    public double getPotencia() {
        return potencia;
    }

    public void setPotencia(double potencia) {
        this.potencia = potencia;
    }

    public String getTipoDeCombustivel() {
        return tipoDeCombustivel;
    }

    public void setTipoDeCombustivel(String tipoDeCombustivel) {
        this.tipoDeCombustivel = tipoDeCombustivel;
    }

    public boolean isLigado() {
        return ligado;
    }

    public void setLigado(boolean ligado) {
        this.ligado = ligado;
    }

}
    
asked by anonymous 29.09.2018 / 18:07

1 answer

2

If you are giving% error of% in method NullPointer and this is in the ligar class, it is most likely that you did not create a Motor object.

In your class Motor has a variable of type Carro , right? Calling a method of the motor class causes Motor error because it is just a variable, not an object.

Do the following, within your constructor of class NullPointer , instantiate the object Carro as follows:

motor = new Motor();

Now Motor is an object and you can call the methods it has.

    
29.09.2018 / 18:38