0

我不熟悉使用对象数组,但无法弄清楚我做错了什么以及为什么我不断收到 Null 指针异常。我正在尝试使用一组设置为打开或关闭的聚光灯对象创建一个剧院类。但是 - 每当我调用这个数组时,我都会得到一个空指针异常。

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;

}
}

我必须在创建数组时做一些基本的错误,但无法弄清楚。

4

4 回答 4

3

代替

arrayOfSpotlights[i].turnOn();

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

线

arrayOfSpotlights =  new spotlight[N];

将创建一系列聚光灯。然而,它不会用聚光灯填充这个数组。

于 2013-02-03T20:47:47.107 回答
2

当您执行“arrayOfSpotlights = new Spotlight[N];”时 您初始化一个长度为 N 的数组,您还需要初始化其中的每个对象:

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

希望我是对的:)

于 2013-02-03T20:47:19.400 回答
1

您不是在创建聚光灯对象。

arrayOfSpotlights =  new spotlight[N];

这只是创建了一组对聚光灯的引用,而不是被引用的对象。

简单的解决方案是

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

顺便说一句,您应该使用TitleCase类名。

你可以这样写你的类,而不使用像 0 和 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;
    }
}
于 2013-02-03T20:48:30.517 回答
0

您声明了数组arrayOfSpotlights,但没有初始化数组的成员(所以它们是null- 你得到了异常)。

将其更改为:

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

    } 
}

它应该可以工作。

于 2013-02-03T20:59:04.780 回答