尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

使用java模拟电梯运行

使用java模拟电梯运行
📅 发布时间:2026/7/9 9:08:30

电梯运行规则:优先一个方向走到头, 再回头, 每经过一层, 就判断该层是否有人按了电梯

代码

importorg.junit.jupiter.api.Test;importjava.util.*;/** * 模拟电梯运行 * 运行规则: 电梯如果上行,会尽量一直上行到最高点,再回头下行到最低点 */publicclassElevator{// 存储每层楼是否有人按了上行或下行按键,电梯会一层一层运动,每到一层就判断一层privatefinalMap<Integer,String>map=newLinkedHashMap<>();// 存储所有的按键顺序,向上的键用正数,向下的键用负数privatefinalList<Integer>list=newLinkedList<>();@Testpublicvoidtest0708()throwsInterruptedException{// 记录电梯当前所在层, 1-16层intcurrentFloor=1;// 记录电梯当前的运动方向,上,下,静止Stringdirection="静止";// 存储最大最小楼层,用于判断是否立即返回intmaxFloor=1;intminFloor=16;Threadthread=newMyThread();thread.start();// 电梯一直在通电运行while(true){Thread.sleep(500);// 初始化最大最小楼层maxFloor=1;minFloor=16;for(inti:list){if(Math.abs(i)>maxFloor){maxFloor=Math.abs(i);}if(Math.abs(i)<minFloor){minFloor=Math.abs(i);}}if(list.size()>0){if("静止".equals(direction)){intnextFloor=Math.abs(list.get(0));if(nextFloor==currentFloor){System.out.println("开门");list.remove(0);}elseif(nextFloor>currentFloor){System.out.println("电梯上行");direction="向上";}else{System.out.println("电梯下行");direction="向下";}}elseif("向上".equals(direction)){currentFloor++;// 没有再向上了if(currentFloor>maxFloor){direction="静止";continue;}System.out.println("电梯到达"+currentFloor+"楼");Stringlight=map.get(currentFloor);if("上".equals(light)||"上,下".equals(light)){System.out.println("电梯开门");light=light.replace("上","").replace(",","");map.put(currentFloor,light);list.remove((Object)currentFloor);// 判断电梯是否还需要继续上行if(list.size()==0){direction="静止";continue;}// 是否继续上行booleanflag=false;for(inti=currentFloor;i<17;i++){if(StringUtils.isNotBlank(map.get(i))){flag=true;break;}}if(!flag){direction="静止";}}}elseif("向下".equals(direction)){currentFloor--;if(currentFloor<minFloor){direction="静止";continue;}System.out.println("电梯到达"+currentFloor+"楼");Stringlight=map.get(currentFloor);if("下".equals(light)||"上,下".equals(light)){System.out.println("电梯开门");light=light.replace("下","").replace(",","");map.put(currentFloor,light);list.remove((Object)(-1*currentFloor));// 判断电梯是否还需要继续下行if(list.size()==0){direction="静止";continue;}// 是否继续下行booleanflag=false;for(inti=currentFloor;i>0;i--){if(StringUtils.isNotBlank(map.get(i))){flag=true;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+"箭头");}}}

相关新闻

  • 云原生学习路线复盘:从 Docker run 到 K8s Operator 的路径
  • 线程生命周期和线程状态
  • Seraphine:基于LCU API的现代化英雄联盟战绩查询与游戏辅助工具

最新新闻

  • 3分钟完成Windows和Office永久激活的终极指南
  • Kaggle 肥胖预测赛:4模型融合实战,加权法提升准确率至 0.916
  • Linux动态壁纸终极指南:如何免费在Linux上运行Wallpaper Engine
  • 终极免费视频压缩方案:如何高效缩减媒体文件90%体积?
  • 混元Hy3正式发布,腾讯的长期主义有了效果
  • 3分钟搞定蓝奏云直链解析:告别繁琐下载,开启高效文件获取新方式

日新闻

  • SQL 查询语句的标准逻辑执行顺序(即语义处理顺序),它与实际书写顺序不同,但决定了数据库如何解析和执行查询
  • ORB-SLAM2 重定位模块深度解析:从 BoW 候选帧到 PnP 优化的 6 步流程
  • 罗技鼠标宏压枪脚本终极指南:从原理到实战的完整解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号