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