0

オブジェクトの配列を使用するのは初めてですが、何が間違っているのか、なぜNullポインター例外が発生し続けるのかわかりません。オンまたはオフに設定されたスポットライト オブジェクトの配列を持つ Theater クラスを作成しようとしています。しかし、この配列を呼び出すたびに、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

array を宣言しましたが、配列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 に答える