-1

accept()abc クラスのオブジェクトの配列を作成しましたが、ユーザーからデータを取得するコードを呼び出すたびに null ポインター例外が発生します。

これはコードです:

   class abc{
    int rollno,i;
    String name;
    public void accept(){
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter roll no: ");
        rollno=sc.nextInt();
    }

    public void display(){
        System.out.println("Roll no: "+rollno);
    }

    public static void main(String[] gs){
        int i;
        abc a[]=new abc[10];

        for(i=0;i<10;i++){
            a[i].accept();    //This line gives null pointer exception
        }

        for(i=0;i<10;i++){
            a[i].display();
        }   
}

誰が問題が何であるかを教えてもらえますか?

4

4 に答える 4

5

a[i]ですのでnull。デフォルトでは初期化されません。abc10 要素の参照型の配列を作成しています。配列内のすべての要素は参照になります。メソッドを呼び出す前に、これらの参照のそれぞれにnull型の具象オブジェクトを割り当てる必要があります。abc

メソッドを呼び出す前に、オブジェクトをインスタンス化する必要があります。

for(i=0;i<10;i++)
{
   a[i] = new abc(); // instantiate it
   a[i].accept();
}
于 2013-07-02T16:51:39.403 に答える
1

これは、配列内の要素を初期化しないためです。

abc a[] = new abc[10];

新しい配列を作成しますが、配列内のオブジェクトをインスタンス化しません。

あなたがする必要があります

abc a[] = new abc[10];
for (int i = 0; i < 10; i++) {
    a[i] = new abc();
    a[i].accept();
}
于 2013-07-02T16:52:59.283 に答える
0

これは、abc a[]=new abc[10];配列のすべての要素が null 値で初期化されるためです。null参照でメソッドを呼び出すたびに、nullポインター例外が生成されます。追加して配列要素を初期化することにより、このnullポンター例外を無効にすることができますa[i] = new abc();

于 2013-07-02T16:53:28.850 に答える