當前位置:編程學習大全網 - 源碼下載 - 數據結構停車場管理JAVA(急!!!)

數據結構停車場管理JAVA(急!!!)

導入Java . util . arrays;

導入Java . util . comparator;

導入Java . util . hashmap;

導入Java . util . scanner;

導入Java . util . stack;

導入Java . util . vector;

導入Java . util . regex . match result;

公共類測試{

private CarStop CarStop = new CarStop(3);

專用CarTunnel tunnel = new CarTunnel();

公共無效測試(){

//存儲車輛信息,因為不是順序輸入,所以放在地圖裏。

HashMap & lt整數,Car & gtcarMap = new HashMap<。整數,Car & gt();

//進入車庫的最早時間和離開車庫的最晚時間。

int startTime,endTime

startTime =整數。MAX _ VALUE

endTime =整數。最小值;

Scanner scanner =新掃描儀(system . in);

//(“A”或“d”或“E”,int,int)

while(scanner . has next(" \ \((A | D | E),(\\d+),(\ \ D+)\ \)"){

scanner.next("\\((A|D|E),(\\d+),(\ \ D+)\ \)");

match result r = scanner . match();

車車;

//如果輸入壹個,

if (r.group(1)。equalsIgnoreCase(" A "){

//車已經錄好了。

if (carMap.keySet()。包含(integer . parse int(r . group(2))){

//拿出來設置到達時間

car = carmap . get(integer . parse int(r . group(2)));

car . arrive = integer . parse int(r . group(3));

}否則{

//否則,記錄汽車。

car =新車(Integer.parseInt(r.group(2))、integer . parse int(r . group(3)));

carMap.put(car.no,car);

}

如果(car.arrive & ltstart time)start time = car . arrive;

if(car . leave & gt;end time)end time = car . leave;

//出站時間和到達時間被視為相同。

}else if (r.group(1)。equalsIgnoreCase(" D "){

if (carMap.keySet()。包含(integer . parse int(r . group(2))){

car = carmap . get(integer . parse int(r . group(2)));

car . leave = integer . parse int(r . group(3));

}否則{

car =新車(Integer.parseInt(r.group(2)),0,integer . parse int(r . group(3)));

carMap.put(car.no,car);

}

如果(car.arrive & ltstart time)start time = car . arrive;

if(car . leave & gt;end time)end time = car . leave;

}else if (r.group(1)。equalsIgnoreCase(" E "){

打破;

}

}

//將記錄的汽車做成數組,排序。

Car[] cars =新車[carmap . size()];

cars = carMap.values()。toArray(汽車);

Arrays.sort(cars,新的比較器& ltCar & gt(){

//排序順序是到達時間>;發行時間>牌照

公共int比較(汽車c1,汽車c2) {

if (c1 .到達!=c2.arrive)返回c 1 . arrive-C2 . arrive;

if (c1 .離開!=c2.leave)返回c 1 . leave-C2 . leave;

返回c 1 . no-C2 . no;

}

});

for(int time = start time;時間& lt=結束時間;time++){

system . out . println(" TIME:"+TIME);

for(int k = 0;k & lt汽車.長度;k++){

car car = cars[k];

//如果壹輛車還沒進停車場,就已經到出站時間了。

if(car . leave = = time & amp;& ampis full()& amp;& amp!carStop.contains(汽車)){

for(int I = tunnel . size()-1;我& gt=0;我- ){

car c = tunnel . get(I);

if (c.equals(car)){

for(int j = I+1;j & lttunnel . size();j++){

System.out.println(car+"為“+car+”讓路,重新進入等候區);

}

tunnel.remove(汽車);

System.out.println(car+“不進停車場就走”);

}否則{

System.out.println(car+"為“+car+”)讓路;

}

}

}否則{

//如果現在有車到了。

if (car.arrive == time){

//停車場不滿意

如果(!carStop.isFull()) {

//進入停車場

carStop.push(汽車);

//開始充電

car.chargeStart = time

System.out.println(car+"進入停車場開始收費");

}否則{

//停車場滿了,等等。

System.out.println(car+"到達等候區等候");

tunnel.push(汽車);

}

}

}

}

//處理停止中的汽車

//不包括汽車同時離開的情況

//按照後進先出的順序尋找任何離開的汽車。

for(int k = carstop . size()-1;k & gt=0;k - ){

car car = carstop . elementat(k);

//準備離開

if (car.leave == time){

Car otherCar

//所有跟在他後面進來的車都準備讓路。

while ((otherCar = carStop.pop())!=汽車){

//進入等候區的最前面。

tunnel.unshift(其他汽車);

System.out.println(otherCar+"準備為“+car+”讓路);

}

for(int m = tunnel . size()-1;m & gt=0;m - ){

系統。out.println(隧道。elementat (m)+“為“+car+”讓路;

}

System.out.println(otherCar+"離開,停車時間:"+(其他車。離開-另壹輛車。charge start));

for(int m = 0;m & lttunnel . size();m++){

系統。out.println(隧道。elementat (m)+“讓路後,重新進入等候區”);

}

汽車候車;

//停車場有空位,等待序列中前面的車入庫。

而(!is full()& amp;& amp(waitingCar = tunnel.shift())!=null ){

carStop.push(等待car);

//停止計時開始

if(waiting car . charge start = =-1){

System.out.println(waitingCar+"停車時間改為"+時間);

waiting car . charge start = time;

}

System.out.println(waitingCar+"進入停車場");

}

}

}

}

}

公共靜態void main(String[] args){

新測試()。test();

}

}

@SuppressWarnings("serial ")

類CarTunnel擴展了Vector & ltCar & gt{

公共汽車隧道()

super();

}

公共汽車班次(){

if (size() == 0)返回null

return remove(0);

}

公共void unshift(汽車汽車){

super.add(0,汽車);

}

公共空推(車車){

super.add(汽車);

}

公共汽車pop(){

if (size() == 0)返回null

返回remove(size()-1);

}

}

@SuppressWarnings("serial ")

類CarStop擴展堆棧& ltCar & gt{

私有int大小;

公共停車場(整數型){

this.size = size

}

public boolean isFull(){

return size()= = size;

}

公共汽車pop(){

返回super . pop();

}

公共汽車推(汽車車){

if(size()& lt;= size){

return super.push(汽車);

}否則{

返回null

}

}

}

汽車等級{

公共int號;

public int到達;

公共假期;

public int charge start =-1;

公共汽車(整數,整數時間,整數超時){

this.no = no

this.arrive = timeIn

this.leave = timeOut

}

公共汽車(整數,整數時間){

這個(不,timeIn,-1);

}

公共字符串toString(){

返回String.format("Car(%d)",no);

}

}

結果:

(壹,631)

(第5條第30款)

(第4條第20款)

(壹,316)

(壹,215)

(壹,1,10)

(D,1.50)

(第二條第三十款)

(3,31)

(第4條第25款)

(第五章第三十二節)

(第六章第四十節)

(E,0,0)

時間:10

汽車(1)進入停車場,開始收費。

時間:11

時間:12

時間:13

時間:14

時間:15

汽車(2)進入停車場並開始充電。

時間:16

汽車(3)進入停車場並開始充電。

時間:17

時間:18

時間:19

時間:20

轎廂(4)到達並在等候區等候。

時間:21

時間:22

時間:23

時間:24

時間:25

汽車(4)沒有進入停車場就離開了。

時間:26

時間:27

時間:28

時間:29

時間:30

汽車(5)到達並在等候區等候。

汽車(3)準備為汽車(2)讓路

汽車(5)為汽車(2)讓路

汽車(3)為汽車(2)讓路

汽車(2)出發,停車時間:15

轎廂(3)讓路並重新進入等候區。

轎廂(5)讓路並重新進入等候區。

汽車(3)進入停車場

汽車(5)停車時間改為:30。

汽車(5)進入停車場

時間:31

汽車(6)到達並在等候區等候。

汽車(5)準備為汽車(3)讓路

汽車(6)為汽車(3)讓路

汽車(5)為汽車(3)讓路

汽車(3)出發,停車時間:15

轎廂(5)讓路並重新進入等候區。

轎廂(6)讓路並重新進入等候區。

汽車(5)進入停車場

汽車(6)停車時間修改為:31。

汽車(6)進入停車場

時間:32

汽車(6)準備為汽車(5)讓路

汽車(6)為汽車(5)讓路

汽車(5)出發,停車時間:2

轎廂(6)讓路並重新進入等候區。

汽車(6)進入停車場

時間:33

時間:34

時間:35分鐘

時間:36

時間:37

時間:38

時間:39

時間:40

汽車(6)出發,停車時間:9

時間:41

時間:42

時間:43

時間:44

時間:45分鐘

時間:46

時間:47

時間:48

時間:49

時間:50

汽車(1)離開,停車時間:40。

  • 上一篇:荷花為什麽“出淤泥而不染”?
  • 下一篇:齒輪計算源代碼
  • copyright 2024編程學習大全網