0

Java で arrayList にオブジェクトを追加する際に問題が発生しています。コードを実行すると、次のエラーが発生します。これは、私の 2 つのファイルのスニペットです。誰かが私の間違いを指摘してくれたら、私は大いに義務付けられます。ありがとう、ジョー

java.lang.NullPointerException at House.addRoom(House.java:18)at House.(House.java:36)

//ルームクラス

  public Room () {
    Scanner scan = new Scanner(System.in);
    scan.useDelimiter("\n");

    System.out.println("Enter description of room:");
    description = scan.next();

    System.out.println("Enter length of room:");
    length = scan.nextDouble();

    System.out.println("Enter width of room:");
    width = scan.nextDouble();
   }

//ハウスクラス

public class House {
  private static ArrayList<Room> abode;

   public void addRoom (){
     abode.add(new Room ());
   }
   public House () {
    idNum = ++internalCount;
    Scanner scan = new Scanner(System.in);
    scan.useDelimiter("\n");

    System.out.println("Enter address of house:");
    address = scan.next();

    System.out.println("Enter number of rooms:");
    numRooms = scan.nextInt();

    System.out.println("Enter type of house:");
    houseType = scan.next();

    for (int i=1; i<=numRooms; i++){
      addRoom();
    }
  }
}
4

5 に答える 5

3

要素を追加する前に初期化する必要がありarraylistます。おそらくコンストラクターで初期化します

private static ArrayList<Room> abode;

public House()
{
 abode = new ArrayList<String>();
//rest of your code 
}

ところで、実装よりもインターフェースにコーディングすることは常に良い習慣です:

つまり、 List<Room> abode = new ArrayList<String>();

于 2013-03-14T10:47:10.857 に答える
1

リストを作成する必要があります。

private static ArrayList<Room> abode = new ArrayList<Room>();

そうしないと、abodeになりnull、 が得られますNullPointerException

また、理由abodeはありstaticますか?これは、 のすべてのインスタンスによって共有されることを意味しますHouse。それはあなたが意図していることですか?

于 2013-03-14T10:48:15.043 に答える
0

これを変える

private static ArrayList<Room> abode;

private static ArrayList<Room> abode = new ArrayList<Room>();

メモリを割り当てずにリスト参照を使用しようとしています。

于 2013-03-14T10:51:13.403 に答える
0

joe u は List を使用して配列リストを追加できます

たとえば。ArrayList の結果 = new ArrayList();

List< ResolveInfo>

その後

results.add();

于 2013-03-14T10:54:11.870 に答える
0

ジョー、オブジェクトのフィールドやメソッドにアクセスする前に、まずオブジェクトを作成する必要があります。

あなたのコードでは、private static ArrayList abode; // オブジェクトは作成されていません

デフォルトでnullを指す参照のみを宣言しています。基本的に、オブジェクトの状態を保存するためにヒープにメモリを割り当てていません。したがって、最初に new 演算子を使用して ArrayList クラスのオブジェクトを作成する必要があり、その後、このオブジェクトに対してさまざまなアクションを実行できます。したがって、コードを次のように置き換えます

private static ArrayList abode = new ArrayList();

于 2013-03-14T11:08:12.060 に答える