0

私はこのコードを持っていますが、それを実行すると、NullPointerException

import javax.swing.JOptionPane;
public class System {


public static void main(String[] args) {
    int a=Integer.parseInt(JOptionPane.showInputDialog("How many planets"));
    Planet p[]=new Planet[a];
    for (int i=1;i<=a;i++){
        ** p[i].setName("romain"); **
                    //line bugging is above
    }
    //for info the .setName method of the Planet class is
     /*public void setName(String Na){
     name=Na;
 }*/

}

}

私の質問は次のとおりです。インクリメンタを配列参照として使用できますか

4

2 に答える 2

1

参照が初期化されていませんPlanet。そのため、NullPointerException が発生しています。

Planet p[]=new Planet[a]参照の配列を作成しますPlanetが、内容はすべて null に初期化されます。次のようなものが必要です。

Planet p[] = new Planet[a];
for (int i = 0; i < a; ++i) {
    p[i] = new Planet();
    p[i].setName("whatever");
}

はい、ループ変数を使用して配列にインデックスを付けることができます。ループ変数は、必要に応じて使用できます。これは、たまたまループにスコープが設定されている通常の変数です。

Java では、配列は 1 から始まるのではなく、常に 0 から始まることに注意してください。最初の要素はインデックス 0 にあります。

于 2012-11-25T05:38:13.347 に答える
0

配列は、インデックス 1 から始まるとは言っておらず、1 から始まるように初期化されていません。入力スタイルを考えると、配列の長さとして植物の数を設定しています。

ループを 0 から開始します。

int a=Integer.parseInt(JOptionPane.showInputDialog("How many planets"));
    Planet p[]=new Planet[a];
    for (int i=0;i<a;i++)
    {
//    -------------------------------------------------------------------
            p[i] = new Planet();       // initializing object reference
//    -------------------------------------------------------------------
        p[i].setName("romain");
    }

編集済み *質問の内容はコメントで説明されています *

于 2012-11-25T05:38:29.913 に答える