2013-02-24 22 views
0
public class ParkedCar { 
    private String make; 
    private String model; 
    private String color; 
    private String licenseNum; 
    public ParkedCar(String make, String model, String color, String licenseNum) { 
     this.make = make; 
     this.model = model; 
     this.color = color; 
     this.licenseNum = licenseNum; 
    } 
    public void setMake(String ma) { 
     make = ma; 
    } 
    public void setModel(String mo) { 
     model = mo; 
    } 
    public void setColor(String c) { 
     color = c; 
    } 
    public void setLicenseNum(String ln) { 
     licenseNum = ln; 
    } 
    public String getMake() { 
     return make; 
    } 
    public String getModel() { 
     return model; 
    } 
    public String getColor() { 
     return color; 
    } 
    public String getLicenseNum() { 
     return licenseNum; 
    } 
} 

public class ParkingMeter { 
    private ParkedCar parkedcar; 
    private int timePurchased; 
    private int timeParked; 
    public ParkingMeter(ParkedCar parkedcar, int timePurchased, int timeParked) { 
     this.parkedcar = parkedcar; 
     this.timePurchased = timePurchased; 
     this.timeParked = timeParked; 
    } 
    /*public ParkingMeter (ParkedCar parkedcar) { 
     this.parkedcar = null; 
    }*/ 
    public void setTimePurchased(int timePurchased) { 
     this.timePurchased = timePurchased; 
    } 
    public int getTimePurchased() { 
     return timePurchased; 
    } 
    public void setTimeParked(int timeParked) { 
     this.timeParked = timeParked; 
    } 
    public int getTimeParked() { 
     return timeParked; 
    } 
    public int TimeExpired() { 
     if (timeParked > timePurchased) 
      return timeParked - timePurchased; 
     else  
      return 0; 
    } 
    public String toString() { 
     return "Make: " + parkedcar.getMake() + "\nModel: " + parkedcar.getModel() + "\nColor: " + parkedcar.getColor() + "\nLicense Number: " + parkedcar.getLicenseNum(); 
    } 
} 

public class ParkingTicket { 
    private ParkingMeter parkingmeter; 
    public ParkingTicket(ParkingMeter parkingmeter) { 
     this.parkingmeter = parkingmeter; 
    } 
    public int TicketCost() { 
     if (parkingmeter.getTimeParked() > parkingmeter.getTimePurchased()) { 
      if (parkingmeter.getTimeParked() <= 60) 
       return 25; 
      else 
       return 25 + (10*(parkingmeter.TimeExpired())/60); 
     } 
     else 
      return 0; 
    }       
} 

public class PoliceOfficer { 
    private String OfficerName; 
    private int OfficerNum; 
    private ParkingMeter pm; 
    private ParkingTicket pt; 
    public PoliceOfficer(ParkingTicket pt, String OfficerName, int OfficerNum) { 
     this.OfficerName = OfficerName; 
     this.OfficerNum = OfficerNum; 
    } 
    public void setOfficerName(String OfficerName) { 
     this.OfficerName = OfficerName; 
    } 
    public void setOfficerNum(int OfficerNum) { 
     this.OfficerNum = OfficerNum; 
    } 
    public String getOfficerName() { 
     return OfficerName; 
    } 
    public int getOfficerNum() { 
     return OfficerNum; 
    } 
    public boolean isExpired() { 
     if (pm.getTimeParked() > pm.getTimePurchased()) 
      return true; 
     else 
      return false; 
    } 
    public String toString() { 
     return "Officer Name: " + OfficerName + "\nOfficer Number: " + OfficerNum + "\n" + "\nFine: " + pt.TicketCost();  
    } 
} 

public class ParkingTicketDemo { 
    public static void main(String[] args) { 
     ParkedCar pc = new ParkedCar("Toyota", "Camry", "Blue", "BXZ 152"); 
     System.out.println(pc); 
     ParkingMeter pm = new ParkingMeter(pc, 60, 120); 
     ParkingTicket pt = new ParkingTicket(pm); 
     PoliceOfficer po = new PoliceOfficer(pt, "Roger", 337); 
     System.out.println(po); 
    } 
} 

我一直在試圖創建一個程序來創建和發出停車票,並遇到了問題它編譯的地方,但是當它運行的時候,它給出了線程「main」java.lang.NullPointerException中的錯誤信息Exception。我是一個相當新的程序員,這是我第一次遇到這個問題,所以我還沒有完全理解它,並且似乎無法修復它,我曾嘗試在網上閱讀其他的東西,但只是不明白,我會愛一個簡單的解釋我的問題我得到「線程中的異常」主「java.lang.NullPointerException即使沒有值設置爲空

+3

NPE會發生什麼? – 2013-02-24 00:37:39

+0

檢查Stacktrace以查找出現'NPE'的代碼行。使用調試器更好地理解您的問題。 – 2013-02-24 00:39:43

+0

在警察職業班的指導下,我確實相信。雖然它必須在其他地方toString只是爲了讓它看起來很漂亮。 – user1730357 2013-02-24 00:41:43

回答

5

的NPE是因爲這兩條線:

PoliceOfficer po = new PoliceOfficer(pt, "Roger", 337); 
System.out.println(po); 

在你的構造爲PoliceOfficer,你不這樣做與ParkingTicket實例pt什麼。因爲你還沒有初始化他們

public PoliceOfficer(ParkingTicket pt /* not set anywhere */, String OfficerName, int OfficerNum) { 
    this.OfficerName = OfficerName; 
    this.OfficerNum = OfficerNum; 
} 

字段ParkingMeter pmParkingTicket pt保持空。

然後嘗試打印對象:System.out.println(po);這確實什麼是po通話toString(),它相當於這樣的:

System.out.println(po.toString()); 

現在,因爲你的toString()

public String toString() { 
    return "Officer Name: " + OfficerName + "\nOfficer Number: " + OfficerNum + "\n" + "\nFine: " + pt.TicketCost();  
} 

使用pt,它會創建一個NullPointerException,因爲pt爲null。

由於您已將ParkingTicket實例傳遞給PoliceOfficer的構造函數,因此請使用該實例來指定其成員變量pt

+0

對不起,你最後一句話讓我困惑了一下,你能用簡單的語言來解釋一下嗎? – user1730357 2013-02-24 00:50:55

+2

你需要在'PoliceOfficer'的構造函數中去'this.pt = pt;'。 – 2013-02-24 00:53:35

+0

@ user1730357更新了我的帖子。基本上在'PoliceOfficer'的構造函數中使用'ParkingTicket'參數初始化其成員變量'pt'。 – 2013-02-24 00:58:17

相關問題