user2037935
user2037935

Reputation: 1

Null pointer exception for Array of Objects

I am new to using arrays of objects but can't figure out what I am doing wrong and why I keep getting a Null pointer exception. I am trying to create an Theatre class with an array of spotlight objects that are either set to on or off. But - whenever I call on this array I get a null pointer exception.

package theatreLights;

public class TheatreSpotlightApp {


public static void main(String[] args) {

    Theatre theTheatre = new Theatre(8);

    System.out.println("element 5 " + theTheatre.arrayOfSpotlights[5].toString());

}

}

package theatreLights;

public class Theatre {

spotlight[] arrayOfSpotlights;

public Theatre(int N){

  arrayOfSpotlights =  new spotlight[N];

    for (int i = 0; i < arrayOfSpotlights.length; i++) { 
        arrayOfSpotlights[i].turnOn();          
    }

}
}


package theatreLights;

public class spotlight {
int state;

public  spotlight(){    
    state = 0;  
}

public void turnOn(){
    state = 1;  
}

void turnOff(){ 
    state = 0;
}

public String toString(){
    String stringState = "";
    if(state == 0){
        stringState = "is off";

    }
    else if(state==1){
        stringState = "is on";
    }

    return stringState;

}
}

I must be doing something basic wrong in creating the array but can't figure it out.

Upvotes: 0

Views: 7297

Answers (4)

Nimrod007
Nimrod007

Reputation: 9913

You declared the array arrayOfSpotlights, but didn't initialize the members of the array (so they are null - and you get the exception).

Change it to:

public class Theatre {
    spotlight[] arrayOfSpotlights;

    public Theatre(int N){

      arrayOfSpotlights =  new spotlight[N];

        for (int i = 0; i < arrayOfSpotlights.length; i++) { 
            arrayOfSpotlights[i]=new spotlight();
            arrayOfSpotlights[i].turnOn();          
        }

    } 
}

and it should work.

Upvotes: 0

Peter Lawrey
Peter Lawrey

Reputation: 533530

You are not creating an spotlight objects.

arrayOfSpotlights =  new spotlight[N];

This just creates an array of references to spotlights, not the objects which are referenced.

The simple solution is

for (int i = 0; i < arrayOfSpotlights.length; i++) { 
    arrayOfSpotlights[i] = new spotlight();
    arrayOfSpotlights[i].turnOn();          
}

BTW You should use TitleCase for class names.

You could write your class like this, without using cryptic code like 0 and 1

public class Spotlight {
    private String state;

    public Spotlight() {
        turnOff();
    }

    public void turnOn() {
        state = "on";  
    }

    void turnOff() { 
        state = "off";
    }

    public String toString() {
        return "is " + state;
    }
}

Upvotes: 1

Reck
Reck

Reputation: 8782

replace

arrayOfSpotlights[i].turnOn();

with

arrayOfSpotLights[i] = new Spotlight();
arrayOfSpotlights[i].turnOn();    

The line

arrayOfSpotlights =  new spotlight[N];

will create an array of spotlights. It will however not populate this array with spotlights.

Upvotes: 3

Odinn
Odinn

Reputation: 808

When you do "arrayOfSpotlights = new spotlight[N];" you init an array of length N, what you need to do is also init each object in it:

for i=0; i<N; i++
    arrayOfSpotlights[i] = new spotlight();
    arrayOfSpotlights[i].turnOn();

Hope I'm correct :)

Upvotes: 2

Related Questions