I cannot compile my program because I have an error that says "Nullpointerexception"

Asked

Viewed 47 times

-1

I’m trying to build a Java project according to the concepts of object-oriented programming.

However the compiler(ECLIPSE) accuses an error in the line of my liigar function. It says it has a Nullpointerexception error. Searching on the internet I saw that this is when the variable is "not initialized". I checked my program and I have a default value that I put to the variable 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 call function:

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 function connect:

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;
    }

}

1 answer

2


If you’re making a mistake NullPointer in the method ligar and this is in the class Motor, most likely is that you did not create an object of Motor.

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

Do the following, within your class builder Carro, instate the object Motor as follows:

motor = new Motor();

Now motor is an object and it will be possible to call the methods it has.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.