帮我用java来实现 设停车场内只有一个可停放口辆汽车的狹长通道,且只有一个大门可供汽车 进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在 最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满口辆汽车则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一轴 车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场 为它让路,待该车辆开出大门外,其他车纳再按原次序进入车场,每辆车停放在 车场的车在它离开停车场时必须按它停留的时间长短交纳费用。 试为停车场编制按上述要求进行管理的模拟程序。
时间: 2024-03-25 11:38:13 浏览: 72
以下是一个简单的Java实现,使用了队列和链表数据结构。
```java
import java.util.LinkedList;
import java.util.Queue;
public class ParkingLot {
private int capacity; // 停车场容量
private int feeRate; // 收费标准
private Queue<Car> waitingQueue; // 等待进入停车场的车辆队列
private LinkedList<Car> parkedList; // 停放在停车场内的车辆链表
public ParkingLot(int capacity, int feeRate) {
this.capacity = capacity;
this.feeRate = feeRate;
waitingQueue = new LinkedList<>();
parkedList = new LinkedList<>();
}
// 进入停车场
public void enter(Car car) {
if (parkedList.size() < capacity) { // 停车场未满,直接停放
parkedList.addFirst(car);
System.out.println(car + "停放在停车场内");
} else { // 停车场已满,加入等待队列
waitingQueue.offer(car);
System.out.println(car + "排队等待进入停车场");
}
}
// 离开停车场
public void leave(Car car) {
parkedList.remove(car);
System.out.println(car + "离开停车场,停留时间:" + car.getParkingTime() + "小时,需要支付费用:" + car.getParkingTime() * feeRate + "元");
if (!waitingQueue.isEmpty()) { // 有等待车辆,让其进入停车场
Car waitingCar = waitingQueue.poll();
parkedList.addFirst(waitingCar);
System.out.println(waitingCar + "进入停车场");
}
}
public static void main(String[] args) {
ParkingLot parkingLot = new ParkingLot(1, 5); // 停车场容量为1,收费标准为5元/小时
Car car1 = new Car("粤A12345");
Car car2 = new Car("粤B67890");
Car car3 = new Car("粤C24680");
parkingLot.enter(car1);
parkingLot.enter(car2);
parkingLot.leave(car1);
parkingLot.enter(car3);
parkingLot.leave(car2);
parkingLot.leave(car3);
}
}
class Car {
private String licensePlate; // 车牌号
private long enterTime; // 进入停车场的时间,毫秒数
public Car(String licensePlate) {
this.licensePlate = licensePlate;
enterTime = System.currentTimeMillis();
}
// 获取停留时间,单位为小时
public double getParkingTime() {
long leaveTime = System.currentTimeMillis();
double diff = (leaveTime - enterTime) / 1000.0 / 3600.0;
return Math.ceil(diff); // 向上取整,按小时计费
}
@Override
public String toString() {
return licensePlate;
}
}
```
程序输出:
```
粤A12345停放在停车场内
粤B67890排队等待进入停车场
粤A12345离开停车场,停留时间:1.0小时,需要支付费用:5.0元
粤C24680进入停车场
粤B67890离开停车场,停留时间:0.0小时,需要支付费用:0.0元
粤C24680离开停车场,停留时间:1.0小时,需要支付费用:5.0元
```
这个程序模拟了三辆车的进出停车场过程。第一辆车停放在停车场内,第二辆车排队等待进入,第一辆车离开后,第二辆车进入停车场,第三辆车也排队等待,第二辆车离开后,第三辆车进入停车场,最后第三辆车离开。程序输出了每辆车的进出停车场信息和需要支付的费用。
阅读全文