[英]How do i resolve this null pointer exception error (Java)?
我正在基於健身系統在bluej上創建一個項目。 項目中有一個名為“ Card”的父類,該父類的子類包括Loyalty,Standard和staff,它們是Gym系統可以容納的所有類型的卡。該系統還具有多個區域,例如游泳池,桑拿浴室等。還有一個sitemanager類,其中包含所有體育館信息,例如,有多少扇門以及區域的詳細信息。
在運行名為centerIO的IO類時,嘗試運行代碼的這一部分;
private void addCard()
{
System.out.println("Enter card id:");
int id = reader.nextInt();
Card cr = hatfield.getCard(id);
hatfield.addCard(cr);
}
我遇到了一個問題,該問題指向zones類中的方法。 這是null異常所指向的方法
public void addCardtoZone(Card C)
{
cards.put(C.getId(),C);
}
站點管理器有兩個帶有“區域”和“門”的哈希圖,“區域”具有該區域中當前所有卡的哈希圖,因此它將保存諸如說明區域中當前有多少卡等方法。如何修復此代碼,以便它實際上將卡添加到該網站嗎? 我不明白為什么這不起作用,因為當我從Zone類中運行該方法時,它可以完美地工作。
這是我在IO類中調用的方法
public void addCard(Card cd)
{
Outside.addCardtoZone(cd);
}
編輯:put方法將一個鍵和一個對象放入哈希圖中
private HashMap cards = new HashMap<Integer,Card>();
這是卡類的示例(忠誠度,標准,職員等3個其他類的超類。)
public class Card
{
public String name;
public int rating;
public int credits;
public String centre;
public int type;
//Public constructor
public Card(String nam, int rat, int cred)
{
name = nam;
rating = rat;
credits = cred;
}
public int getId() //getId() has been overridden in the child classes
{
return 0;
}
public String getName()
{
return name;
}
/** returns member's rating
* @return member's rating
*/
public int getRating()
{
return rating;
}
/** changes a member's rating
* @param rat new rating
*/
public void changeRating(int rat)
{
rating = rat;
}
}
}
public void addCardToZone(Card C) {
if(cards == null) {
cards = new HashMap<Integer, Card>();
}
cards.put(C.getId(),C);
}
現在,您的addCardToZone
方法將檢查cards
是否為null
。 如果為null
,它將對其進行初始化。 之后,您只需照常put
卡即可。 if
僅在第一次調用addCardToZone
輸入addCardToZone
。
而不是告訴您解決方案是什么(這有點困難,因為我們看不到所有可能相關的源代碼...),而是如何診斷這一點。
1)使用stacktrace識別引發NPE的代碼行。
您已將其標識為:
cards.put(C.getId(),C);
2)找出可能導致NPE的原因。
在這種情況下,只有兩種可能的原因:
cards
為null
則cards.put
將拋出一個NPE。 c
為null
則c.getId()
將引發NPE。 3)在上下文中消除邏輯上不可能的情況。
例如,如果將cards
聲明為final
並且已將其初始化為非null值,則可以消除這種可能的原因。 或者,如果在上一條語句中可以以某種方式使用c
變量(如果該變量為null則失敗),則可以消除該變量。
4)向后遍歷重復的代碼3)...
5)如果失敗,請使用調試器或明智的日志記錄/跟蹤打印來消除可能的原因或確認可疑之處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.