使用java模拟电梯运行

📅 2026/7/9 9:03:17
使用java模拟电梯运行
电梯运行规则:优先一个方向走到头, 再回头, 每经过一层, 就判断该层是否有人按了电梯代码importorg.junit.jupiter.api.Test;importjava.util.*;/** * 模拟电梯运行 * 运行规则: 电梯如果上行,会尽量一直上行到最高点,再回头下行到最低点 */publicclassElevator{// 存储每层楼是否有人按了上行或下行按键,电梯会一层一层运动,每到一层就判断一层privatefinalMapInteger,StringmapnewLinkedHashMap();// 存储所有的按键顺序,向上的键用正数,向下的键用负数privatefinalListIntegerlistnewLinkedList();Testpublicvoidtest0708()throwsInterruptedException{// 记录电梯当前所在层, 1-16层intcurrentFloor1;// 记录电梯当前的运动方向,上,下,静止Stringdirection静止;// 存储最大最小楼层,用于判断是否立即返回intmaxFloor1;intminFloor16;ThreadthreadnewMyThread();thread.start();// 电梯一直在通电运行while(true){Thread.sleep(500);// 初始化最大最小楼层maxFloor1;minFloor16;for(inti:list){if(Math.abs(i)maxFloor){maxFloorMath.abs(i);}if(Math.abs(i)minFloor){minFloorMath.abs(i);}}if(list.size()0){if(静止.equals(direction)){intnextFloorMath.abs(list.get(0));if(nextFloorcurrentFloor){System.out.println(开门);list.remove(0);}elseif(nextFloorcurrentFloor){System.out.println(电梯上行);direction向上;}else{System.out.println(电梯下行);direction向下;}}elseif(向上.equals(direction)){currentFloor;// 没有再向上了if(currentFloormaxFloor){direction静止;continue;}System.out.println(电梯到达currentFloor楼);Stringlightmap.get(currentFloor);if(上.equals(light)||上,下.equals(light)){System.out.println(电梯开门);lightlight.replace(上,).replace(,,);map.put(currentFloor,light);list.remove((Object)currentFloor);// 判断电梯是否还需要继续上行if(list.size()0){direction静止;continue;}// 是否继续上行booleanflagfalse;for(inticurrentFloor;i17;i){if(StringUtils.isNotBlank(map.get(i))){flagtrue;break;}}if(!flag){direction静止;}}}elseif(向下.equals(direction)){currentFloor--;if(currentFloorminFloor){direction静止;continue;}System.out.println(电梯到达currentFloor楼);Stringlightmap.get(currentFloor);if(下.equals(light)||上,下.equals(light)){System.out.println(电梯开门);lightlight.replace(下,).replace(,,);map.put(currentFloor,light);list.remove((Object)(-1*currentFloor));// 判断电梯是否还需要继续下行if(list.size()0){direction静止;continue;}// 是否继续下行booleanflagfalse;for(inticurrentFloor;i0;i--){if(StringUtils.isNotBlank(map.get(i))){flagtrue;break;}}if(!flag){direction静止;}}}}}}classMyThreadextendsThread{Overridepublicvoidrun(){// 模拟按键// 在3楼按向上按钮addOptions(3,上);addOptions(6,上);addOptions(3,下);addOptions(4,下);addOptions(10,下);addOptions(5,上);addOptions(12,上);}publicvoidaddOptions(intfloor,Stringdirection){try{Thread.sleep(757);}catch(InterruptedExceptione){thrownewRuntimeException(e);}if(下.equals(direction)){list.add(-1*floor);}else{list.add(floor);}if(map.containsKey(floor)StringUtils.isNotBlank(map.get(floor))){if(!direction.equals(map.get(floor))){map.put(floor,上,下);}}else{map.put(floor,direction);}System.out.println(乘客在floor楼按向direction箭头);}}}