Petros Boufidis
Petros Boufidis

Reputation: 29

Why does the counter inside if statement not work?

Hello friends I am trying to build a class Car for a project. There are many methods inside the following code as well as an if statement that I am having trouble building, consider the following code

public class Car extends Vehicle {
    private boolean isDriving;
    private final int horsepower;
    private boolean needsMaintenance = false;
    private int tripsSinceMaintenance = 0;

    Car() {
        super();
        this.horsepower = 0;
        this.isDriving = false;
        this.needsMaintenance = false;
        this.tripsSinceMaintenance = 0;
    }

    public int getHorsepower() {
        return this.horsepower;
    }

    public boolean getDrive() {
        return this.isDriving;
    }

    public boolean getMain() {
        return this.needsMaintenance;
    }

    public int getTRIP() {
        return this.tripsSinceMaintenance;
    }

    public void drive() {
        this.isDriving = true;
    }

    public void stop() {
        this.isDriving = false;
    }


    public void repair() {
        this.needsMaintenance = false;
        this.tripsSinceMaintenance = 0;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        Car auto = new Car();
        auto.drive();
        auto.stop();

        if (auto.isDriving == true) {
            if (auto.isDriving == false)
                auto.tripsSinceMaintenance = auto.tripsSinceMaintenance + 1;
        }

        if (auto.tripsSinceMaintenance > 100)
            auto.needsMaintenance = true;
        System.out.println("Drive: " + auto.getDrive());
        System.out.println("trip: " + auto.getTRIP());
    }
}

What I want to do is whenever the attribute isDriving goes from true to false the tripsSinceMaintenance should increase by 1 and also when tripsSinceMaintenanceis greater than 100,needsMaintenanceshould becometrue`.

here I expected trips to be 1 but the result is the following:

Drive: false trip: 0

I have tried this.isDriving==true; and basicaly wherever auto is inside the if statement I put this but the following error appears

non static variable cannot be referenced from static context

help me please!

Upvotes: 0

Views: 273

Answers (2)

Deepanshu
Deepanshu

Reputation: 291

What i want to do is whenever the attribute isDriving goes from true to false the tripsSinceMaintenance should increase by 1 and also when tripsSinceMaintenance is greater than 100 needsMaintenance should become true

Do this inside stop() method

fun stop() {
    if (isDriving) {
        tripsSinceMaintenance++;
    }
    if (tripsSinceMaintenance > 100) {
        needsMaintenance = true;
    }
    isDriving = false;
}

Upvotes: 2

J Reyn
J Reyn

Reputation: 21

You don't need to put == true inside of an if statement, it's doing that already,

if(someCondition) { // <-- this executes if the condition is true.

Also, you have conflicting conditions nested, meaning...

if (thisIsTrue) {
    if (!thisIsTrue) { 
        // <--- unreachable statements

where you should be incrementing your variable is where you're setting "isDriving = true" So your code would look like this:

public void drive() {
    this.isDriving=true;
    auto.tripsSinceMaintenance++;
}

Upvotes: 1

Related Questions