java数据结构停车场管理系统_java版数据结构的停车场管理系统很急,后天就得答辩...

最佳回答

推荐于:2021-02-13 19:32

import java.util.Arrays;import java.util.Comparator;import java.util.HashMap;import java.util.Scanner;import java.util.Stack;import java.util.Vector;import java.util.regex.MatchResult;public class Test {private CarStop carStop = new CarStop(3);private CarTunnel tunnel = new CarTunnel();public void test(){//存放车辆信息,因为不是顺序输入的,所以放到Map中HashMap carMap = new HashMap();//最早进入车库的时间和最晚出车库的时间int startTime, endTime;startTime = Integer.MAX_VALUE;endTime = Integer.MIN_VALUE;Scanner scanner = new Scanner(System.in);//("A"或者"D"或者"E", int, int)while(scanner.hasNext("\((A|D|E),(\d+),(\d+)\)")){scanner.next("\((A|D|E),(\d+),(\d+)\)");MatchResult r = scanner.match();Car car;//如果输入Aif (r.group(1).equalsIgnoreCase("A")){// 该车已经记录过if (carMap.keySet().contains(Integer.parseInt(r.group(2)))){// 取出来设置到达时间car = carMap.get(Integer.parseInt(r.group(2)));car.arrive = Integer.parseInt(r.group(3));}else{// 否则就记录该车car = new Car(Integer.parseInt(r.group(2)), Integer.parseInt(r.group(3)));carMap.put(car.no, car);}if (car.arrive < startTime) startTime = car.arrive;if (car.leave > endTime) endTime = car.leave;// 出库时间和到达时间同样处理}else if (r.group(1).equalsIgnoreCase("D")){if (carMap.keySet().contains(Integer.parseInt(r.group(2)))){car = carMap.get(Integer.parseInt(r.group(2)));car.leave = Integer.parseInt(r.group(3));}else{car = new Car(Integer.parseInt(r.group(2)), 0, Integer.parseInt(r.group(3)));carMap.put(car.no, car);}if (car.arrive < startTime) startTime = car.arrive;if (car.leave > endTime) endTime = car.leave;}else if (r.group(1).equalsIgnoreCase("E")){break;}}// 把记录过的车做成数组并且排序Car[] cars = new Car[carMap.size()];cars = carMap.values().toArray(cars);Arrays.sort(cars, new Comparator(){// 排序顺序是到达时间>出库时间>车牌public int compare(Car c1, Car c2) {if (c1.arrive!=c2.arrive) return c1.arrive - c2.arrive;if (c1.leave!=c2.leave) return c1.leave - c2.leave;return c1.no - c2.no;}});for (int time=startTime; time<=endTime; time++){System.out.println("TIME:" + time);for (int k=0;k=0;i--){Car c = tunnel.get(i);if (c.equals(car)){for (int j=i+1;j=0; k--){Car car = carStop.elementAt(k);//准备离开if (car.leave == time){Car otherCar;// 所有在他后面进来的车准备让路while ((otherCar = carStop.pop())!=car){// 进入等待区的最前面tunnel.unshift(otherCar);System.out.println(otherCar + "准备为" + car + "让路");}for (int m=tunnel.size()-1;m>=0;m--){System.out.println(tunnel.elementAt(m) + "为" + car + "让路");}System.out.println(otherCar + "离开,停车时间:" + (otherCar.leave - otherCar.chargeStart));for (int m=0; m{public CarTunnel(){super();}public Car shift(){if (size() == 0) return null;return remove(0);}public void unshift(Car car){super.add(0, car);}public void push(Car car){super.add(car);}public Car pop(){if (size() == 0) return null;return remove(size()-1);}}@SuppressWarnings("serial")class CarStop extends Stack{private int size;public CarStop(int size){this.size = size;}public boolean isFull(){return size() == size;}public Car pop(){return super.pop();}public Car push(Car car){if (size() <= size){return super.push(car);}else{return null;}}}class Car{public int no;public int arrive;public int leave;public int chargeStart = -1;public Car(int no, int timeIn, int timeOut){this.no = no;this.arrive = timeIn;this.leave = timeOut;}public Car(int no, int timeIn){this(no, timeIn, -1);}public String toString(){return String.format("Car(%d)", no);}}结果:(A,6,31)(A,5,30)(A,4,20)(A,3,16)(A,2,15)(A,1,10)(D,1,50)(D,2,30)(D,3,31)(D,4,25)(D,5,32)(D,6,40)(E,0,0)TIME:10Car(1)进入停车场并且开始计费TIME:11TIME:12TIME:13TIME:14TIME:15Car(2)进入停车场并且开始计费TIME:16Car(3)进入停车场并且开始计费TIME:17TIME:18TIME:19TIME:20Car(4)到达,在等待区等待TIME:21TIME:22TIME:23TIME:24TIME:25Car(4)没进入过停车场就离开了TIME:26TIME:27TIME:28TIME:29TIME:30Car(5)到达,在等待区等待Car(3)准备为Car(2)让路Car(5)为Car(2)让路Car(3)为Car(2)让路Car(2)离开,停车时间:15Car(3)让路完毕,重新进入等待区Car(5)让路完毕,重新进入等待区Car(3)进入停车场Car(5)停车计时时间改为:30Car(5)进入停车场TIME:31Car(6)到达,在等待区等待Car(5)准备为Car(3)让路Car(6)为Car(3)让路Car(5)为Car(3)让路Car(3)离开,停车时间:15Car(5)让路完毕,重新进入等待区Car(6)让路完毕,重新进入等待区Car(5)进入停车场Car(6)停车计时时间改为:31Car(6)进入停车场TIME:32Car(6)准备为Car(5)让路Car(6)为Car(5)让路Car(5)离开,停车时间:2Car(6)让路完毕,重新进入等待区Car(6)进入停车场TIME:33TIME:34TIME:35TIME:36TIME:37TIME:38TIME:39TIME:40Car(6)离开,停车时间:9TIME:41TIME:42TIME:43TIME:44TIME:45TIME:46TIME:47TIME:48TIME:49TIME:50Car(1)离开,停车时间:40

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学中对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM中的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值