我是新手使用对象数组,但无法弄清楚我做错了什么以及为什么我一直得到Null指针异常。我正在尝试创建一个Theater类,其中包含一组聚光灯对象,这些对象可以设置为打开或关闭。但是 - 每当我调用这个数组时,我都会得到一个空指针异常。
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;
}
}
我必须在创建数组时做一些基本的错误,但无法弄明白。
答案 0 :(得分:3)
替换
arrayOfSpotlights[i].turnOn();
与
arrayOfSpotLights[i] = new Spotlight();
arrayOfSpotlights[i].turnOn();
该行
arrayOfSpotlights = new spotlight[N];
将创建一系列聚光灯。但是它不会用聚光灯填充这个数组。
答案 1 :(得分:2)
当你做“arrayOfSpotlights = new spotlight [N];”你初始化一个长度为N的数组,你需要做的是初始化其中的每个对象:
for i=0; i<N; i++
arrayOfSpotlights[i] = new spotlight();
arrayOfSpotlights[i].turnOn();
希望我是对的:)
答案 2 :(得分:1)
您没有创建聚光灯对象。
arrayOfSpotlights = new spotlight[N];
这只会创建一个对聚光灯的引用数组,而不是引用的对象。
简单的解决方案是
for (int i = 0; i < arrayOfSpotlights.length; i++) {
arrayOfSpotlights[i] = new spotlight();
arrayOfSpotlights[i].turnOn();
}
BTW您应该使用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;
}
}
答案 3 :(得分: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();
}
}
}
它应该有用。