2

わかりましたので、null ポインター例外を生成しているコードで問題が発生しています。つまり、コードがオブジェクトを使用する必要がある場所で null 値を使用しようとしています (API から直接)。私がやっていることは、文字列値を変数に割り当て、オブジェクトである Room 型の配列を作成するコンストラクタを持つ Hotel というクラスがあることです。これは簡単なはずですが、私の人生ではこれを理解することはできません。

コードをできるだけ最小限に抑えようとします。

サイズ NUM_ROOMS の新しい配列を作成するオブジェクト Hotel のコンストラクター

含まれている更新は次のとおりです。残念ながら、まだヌルポインターの問題に悩まされています

public Hotel(String hotelName)
{
    name = hotelName;
    theRoom = new Room[NUM_ROOMS];
}

このコンストラクターは Room 型の配列を作成し、そのパラメーターは変数に割り当てられます

public Room(String guestName, int partySize, int bedCountRequired,
        double ratePerDay, int daysStaying)
{
    guest = guestName;
    number = partySize;
    numBeds = bedCountRequired;
    rate = ratePerDay;
    numOfDays = daysStaying;
}

この次のメソッドは、次のことを想定しています。

1) 指定されたパラメータを使用して、オブジェクト Room の新しいインスタンスを作成します

2) インデックス roomsRented でそのインスタンスへの配列参照を割り当てます (コードが最初に初期化されたときにゼロとして定義され、その後 1 ずつ増加します)

public void addReservation(String guestName, int partySize,
        int bedCountRequired, double ratePerDay, int daysStaying)
{
    Room roomHolder = new Room(guestName, partySize, bedCountRequired,
            ratePerDay, daysStaying);

    theRoom[roomsRented] = roomHolder;

    roomsRented++;
}

私が遭遇している問題は、

theRoom[roomsRented] = roomHolder;

ヌルポインタ例外が発生しているようです。前述の方法で使用しているにもかかわらず、配列変数 theRoom が使用されていないという Eclipse からのエラーも表示されます。これにより、そのオブジェクトを正しく参照していないと信じるようになります。ただし、その参照が正しくない理由はわかりません。theRoom[0] を代入しても、コンパイラは引き続き null ポインターを返します。配列の構築に問題は見られません。つまり、null ポインター例外を引き起こす可能性がある唯一の問題は、配列内の値を参照しない場合です。

何かご意見は?

答えが非常に単純である場合は、貢献と謝罪を事前に感謝します。

EDIT*** ご協力ありがとうございます。変数が見つからないという問題は解決されましたが、配列内のオブジェクトを参照しようとするたびに nullpointer 例外が発生します。配列を参照しようとしている方法の例を次に示します。

public double getTotalRentalSales()
{
    // Iterate through the array
    for (int i = 0; i < theRoom.length; i++)
    {
        // sum the amount money received per rental
        totalRate = totalRate + theRoom[i].getRate();
    }
    // Return total
    return totalRate;
}

getRate() は、オブジェクト Room から可変レートを返すメソッドです。

totalRate = totalRate + theRoom[i].getRate();

この状況でヌルポインターを引き起こしています。オブジェクト参照に問題はありますか?

4

2 に答える 2

4

問題は、そのスコープで theRoom と呼ばれる変数を定義しているコンストラクターで、値 new Room[NUM_ROOMS] をtheRoomという名前の Hotel クラス フィールドに割り当てるのではなく、というコンストラクター内の変数に割り当てることです。部屋

コンストラクターで型宣言 (Room[]) を削除するだけで、期待どおりに機能します。また、将来的には、この種の問題を回避するためにthisキーワードを使用することをお勧めします。

public Hotel(String hotelName)
{
 this.name = hotelName;
 this.theRoom = new Room[NUM_ROOMS];
}
于 2012-11-24T00:33:42.987 に答える