返回一个对象的新实例
问题描述:
我正在编写一个程序来模拟停车票系统。我共有4个不同的课程,分别是Parked Car,ParkingMeter,ParkingTicket和PoliceOfficer。在我的PoliceOfficer班上,我有一个if语句来确定警员是否应该为停放的车辆发放车票。返回一个对象的新实例
我有这样的声明:return new ParkingTicket(this,car,meter)。我收到一个不兼容的类型错误。如果我需要为我的其他课程发布我的代码,请告诉我。
停车票类别:
import java.text.DecimalFormat;
public class ParkingTicket {
private static int ticketCount;
private ParkedCar car;
private PoliceOfficer officer;
private ParkingMeter meter;
private double fine;
public final double BASE_FINE = 25.0;
public final double HOURLY_FINE = 10.0;
public ParkingTicket (ParkedCar aCar, PoliceOfficer anOfficer, ParkingMeter aMeter) {
this.car = aCar;
this.officer = anOfficer;
this.meter = aMeter;
calculateFine();
}
public void calculateFine() {
// Calculate fine & increment ticket count
++ticketCount;
int timeOver = (int)Math.ceil((car.getMinutesParked() - meter.getMinutesPurchased()/60.0));
fine = BASE_FINE * HOURLY_FINE * (timeOver - 1);
}
public String toString() {
DecimalFormat newDecimal = new DecimalFormat("$###.00");
return "Ticket Number: " + ticketCount + "\n" +
car + "\n" + meter + "\n" + "Fine: " + newDecimal.format(fine) + "\n"
+ officer;
}
}
警官类:
public class PoliceOfficer {
// Declare data fields
private String name;
private String badgeNumber;
// Default constructor
public PoliceOfficer (String name, String badgeNumber) {
this.name = name;
this.badgeNumber = badgeNumber;
}
// Copy of PoliceOfficer
public PoliceOfficer (PoliceOfficer OfficerCopy) {
this.name = OfficerCopy.name;
this.badgeNumber = OfficerCopy.badgeNumber;
}
// Class to check a parked car and determine if the
// cars time has expired
public ParkingTicket check(ParkedCar car, ParkingMeter meter) {
if (car.getMinutesParked() > meter.getMinutesPurchased()) {
// Creating a new object of ParkingTicket object
return new ParkingTicket(this,car,meter);
} else {
return null;
}
}
// toString class
public String toString() {
return "Officer Name: " + name + "/n" + "Badge ID: " + badgeNumber;
}
}
答
你拿到你的论点相反。该ParkingTicket
构造函数需要它的参数是:
(ParkedCar, PoliceOfficer, ParkingMeter)
但你传递
(PoliceOfficer, ParkedCar, ParkingMeter)
所有你需要做的是改变调用new ParkingTicket(car, this, meter)
。
答
你提到实例中PoliceOfficer
ParkingTicket
(所以this
为PoliceOfficer
)
new ParkingTicket(this,car,meter)
我认为它应该是
new ParkingTicket(car,this,meter)
因为构造函数签名是ParkingTicket(ParkedCar, PoliceOfficer, ParkingMeter)
忘记我的ParkingTicket签名需要匹配时,我打电话来创建一个新的ParkingTicket对象。感谢您的快速帮助:) – Chewy 2014-12-04 16:23:15