0
   Collection Class


private E[] data;


@Override
       public boolean add(E element) {
       //NULL POINTER EXCEPTION HAPPENS ON NEXT LINE
                data[actualSize] = element;
                actualSize++;

          return true;
       }

主要

        System.out.println ("Enter the integer to be added:   ");
        n = scan.nextInt();

        ac.add(n);

コレクションクラスのコメント行の後にnullポインタ例外が発生します...なぜですか?!?!?

編集:私の問題は、E []データのサイズを変更する必要があるということですが、データのサイズを変更するにはどうすればよいですか?私の先生は、この「E」のビジネスについて私たちに話したことはありませんでした。

4

1 に答える 1

6

どうして?!?!?

data初期化されていないためです。null初期化されていないインスタンス変数のデフォルト値です。


しかし、もっと根本的な問題があるようです:

  • あなたは、Java 配列が魔法のように適切なサイズで自分自身を割り当て、さらに大きくなるという印象を受けているようです。実際、配列を割り当てるときは、プログラムで配列の要素数を明示的に指定する必要があります。割り当てが完了すると、配列のサイズは固定されます。

  • コードは、ある種のジェネリック型を実装しようとしているようです (ここでE) は、ジェネリック型パラメーターです。


私の問題は、E[] データのサイズを変更する必要があることです。データのサイズを変更するにはどうすればよいですか?

適切なサイズの新しい配列を作成し、要素を古いものから新しいものにコピーしdata、新しい配列を指すように変数を更新します。Javaで新しい配列を作成する方法については、ノート/教科書を確認してください。

私の先生は、この「E」ビジネスについて私たちに話したことは一度もありませんでした。

  1. ほとんどの場合、ジェネリック型パラメーターです。

  2. 私は、彼女そのことをクラスに伝えたか、Java 教科書の関連部分をクラスが読むように設定したと確信しています。

E(それがジェネリック型パラメーターであると仮定するとE[]、「チェックされていない変換」の警告なしで新しい配列インスタンスを割り当てるのは少し難しいです。おそらく、インストラクタークラスが現在できることよりも進んでいます...)

于 2012-09-23T02:45:17.167 に答える