当前位置: 首页 > news >正文

使用java模拟电梯运行

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

代码

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+"箭头");}}}
http://www.jsqmd.com/news/1153298/

相关文章:

  • 实时 AI 音乐交互系统:低延迟音频生成的工程挑战
  • [飞斯柯罗] 想了解什么是网络安全资产和 KMS?
  • 面向低空无人系统的分布式智能控制与协同基础设施
  • PHP再曝高危安全漏洞:TLS连接缺陷可致FPM全面崩溃,OpenSSL内存损坏隐患同步浮现
  • 2026最新7款新手友好AI编程助手实测 学生党平替全汇总
  • dbg -基础指令
  • ChatBI试点常见12问:客户成功一线的FAQ与行动建议
  • Wireshark 与 SniffMaster 对比 移动端抓包场景下的工具选型
  • League-Toolkit终极指南:英雄联盟自动化工具深度解析与高效配置
  • 线程生命周期和线程状态
  • 大模型指令遵循能力评测:从单轮评分到多轮一致性验证
  • 经典算法实例应用:后继者(二)
  • AI 相关概念之(基础层级):机器学习、神经网络、深度学习
  • 小团队知识库软件怎么选?2026年主流工具对比与精选盘点
  • 如何将B站缓存视频转换为MP4:m4s-converter完整使用指南
  • Seraphine:基于LCU API的现代化英雄联盟战绩查询与游戏辅助工具
  • 亚远景科技受邀亮相 2026 上海国际低碳智慧出行展览会
  • “Sample Is Feature: Beyond Item-Level, Toward Sample-Level Tokens for Unified Large Recommender Mode
  • 科创企业商业秘密保护的核心价值与落地意义|筑牢研发数据与技术壁垒
  • Meta-Llama-3 模型权重申请与下载:GitHub/Hugging Face 双路径 3 小时全流程
  • 终极百度网盘直链解析教程:告别限速的简单Python工具
  • BetterGI:智能游戏助手,彻底解放你的原神游戏时间
  • B站视频格式转换终极方案:5秒完成m4s到MP4无损转换
  • 创业孵化运营升级:创业导师如何贯穿园区全链路运营
  • 飞书服务端SDK v1.0 集成实战:3步完成消息推送与事件订阅
  • 工业机器人公司有没有在真实场景跑过的?用数据说话
  • Managers/APConfigManager.cs
  • 网络安全——计算机网络基础下(下篇)
  • 通用下载方法
  • 3分钟永久备份B站视频:m4s-converter让缓存视频永不失效的完整指南