好吧,我正在生成一個空指針異常的代碼,這意味着我的代碼嘗試在它應該使用對象的位置使用空值(直在API之外)。我在做的是我有一個名爲Hotel的類,它有一個構造函數,它將一個字符串值賦給一個變量並創建一個類型爲Room的對象的數組。我知道這應該是直接的,但對於我的生活,我無法弄清楚這一點。將對象添加到數組時,出現NullPointerException
我會盡量保持代碼的簡約越好:
構造一個對象,酒店,創建大小NUM_ROOMS的新數組
這裏有包括更新,我還在堅持與空指針問題不幸
public Hotel(String hotelName)
{
name = hotelName;
theRoom = new Room[NUM_ROOMS];
}
此構造函數創建類型間,它的參數被分配給變量的陣列
public Room(String guestName, int partySize, int bedCountRequired,
double ratePerDay, int daysStaying)
{
guest = guestName;
number = partySize;
numBeds = bedCountRequired;
rate = ratePerDay;
numOfDays = daysStaying;
}
這下面的方法被認爲:
1)使用提供的參數
2)分配索引roomsRented在陣列參考該實例來創建所述對象間的一個新實例(定義爲零時的代碼首先被初始化然後由一個後增加)
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;
看起來會導致空指針異常。我也從Eclipse中得到一個錯誤,即數組變量theRoom是未使用的,儘管我在前面提到的方法中使用了它。這導致我相信我沒有正確引用該對象。但是,我不知道爲什麼那個引用是不正確的,即使我在房間[0]中替換,編譯器仍然給我一個空指針。我沒有看到任何與我的數組構造有關的問題,這對我來說意味着唯一可能導致空指針異常的問題是如果我沒有在數組中引用任何值。
有什麼想法?
如果答案非常簡單,請提前致謝。
編輯*** 謝謝您的幫助,而不是被人發現與變量的問題已經解決,但每次我嘗試了數組中引用的對象我仍然得到一個空指針異常。下面是如何我試圖引用數組的例子:
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()是從物體間
totalRate = totalRate + theRoom[i].getRate();
返回可變速率的方法導致了空指針在這個情況下。我的對象引用有問題嗎?
不幸的是我還在正從到數組引用一個空指針異常,例如 totalRate = totalRate +瞟着房間[I] .getRate(); 其中getRate()是返回Room構造函數中描述的rate變量的方法。 該代碼仍然給我一個空指針,如果我的引用無效 – UvrD
好吧,創建一個新房間[NUM_ROOMS]將創建一個數組,最多可以存儲NUM_ROOMS個對象房間,但默認情況下每個位置都由null初始化。所以,除非您在租用所有房間時調用getTotalRentalSales(),否則您將始終獲得NPE。你想執行操作totalRate = totalRate + theRoom [i] .getRate();直到我
pabrantes
優秀的洞察那裏pabrantes,你只是爲我在那裏促進了一個重大的「燈開關」的時刻,非常感謝。 我最終只是改變一個方法,以便每次我做了一個新的引用,它增加了一些佔位符變量的計數器。這樣,當我調用任何for循環來操縱數組時,它只會爲元素定義它。 – UvrD