基于Java的电梯系统实现过程
一、思路
写一个简单的电梯系统,首先根据老师提供的需求,写一下基础思路:
- 电梯有最高层和最低层,输入数字选择正确楼层数
- 输入数字大于当前楼层,则为上行;小于当前楼层,则为下行
- 每次输入数字的时候,需要对同为上行的数字或者同为下行的数字,进行排序
- 所输入的目标楼层用集合存放,循环最低层到最高层,如果当前层在集合中存在,显示开门,若还有目标楼层,则关门,继续到下一目标楼层。
- 当选择一个目标楼层,会生成随机重量记录在目标楼层,上行用原来重量加上目标楼层重量,下行则用原来重量减去目标楼层重量
二、实现
2.1电梯类
packageEle; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Iterator; importjava.util.List; importjava.util.Random; publicclassElevator{ privateListupFloorList=newArrayList ();//上升楼层 privateList downFloorList=newArrayList ();//下降楼层 privateint[]storeyWeight;//目标层重量 privateintcapacity;//电梯最大重量 privateinttopFloor;//电梯最高层 privateintbottomFloor;//电梯最底层 privateintnowFloor=1;//当前层 publicElevator(intbottomFloor,inttopFloor,intcapacity){//有参构造方法 this.topFloor=topFloor; this.bottomFloor=bottomFloor; this.capacity=capacity; //当前楼层减最低层,就是当前层重量的下标假如当前楼层为5楼,5楼下标就是5-1=4 //初始化目标楼层重量,数组大小=最高层-最低层+1 storeyWeight=newint[(topFloor-bottomFloor+1)]; } //设置楼层 publicvoidSetFloor(intfloorNum){ //如果所选楼层与所在楼层相同,则提示 if(floorNum==nowFloor){ System.out.println("请选择其它楼层"); return; } //生成90-500之间的随机重量 Randomrandom=newRandom(); intthisFloorWeight=random.nextInt(500-90+1)+90; intsum=0; //目标楼层增加的重量 for(inti=0;i 最大重量,提示 if(sum+thisFloorWeight>this.capacity){ System.out.println("超重了哟"); return; } //当前输入楼层重量加上该楼层新增加重量后的重量 storeyWeight[floorNum-bottomFloor]+=thisFloorWeight; //如果输入楼层数已经在上升或下降楼层的集合中,则只新增重量,不添加楼层 if(!upFloorList.contains(floorNum)&&!downFloorList.contains(floorNum)){ if(floorNum>nowFloor){ upFloorList.add(floorNum); //上升楼层升序排序 Collections.sort(upFloorList); }else{ downFloorList.add(floorNum); //下降楼层降序排序 downFloorList.sort(Collections.reverseOrder()); } } } //上升:从所在层到所选楼层中的最高层 //下降:从所在层到所选楼层中的最低层 //获得集合中最后一个元素:list.get(list.size()-1); //启动电梯 publicvoidStartElevator()throwsInterruptedException{ System.out.println("当前第<"+nowFloor+">层"); //上行 if(upFloorList.size()>0){ System.out.println("---电梯上行---"); for(inti=nowFloor+1;i<=upFloorList.get(upFloorList.size()-1);i++){ Thread.sleep(500); System.out.println("---第"+i+"层---"); if(upFloorList.contains(i)){ System.out.println("☆开门☆"); nowFloor=i; upFloorList.remove(upFloorList.indexOf(i)); storeyWeight[i-bottomFloor]=0; if(upFloorList.size()>0){ System.out.println("剩余所选层数为:"); Iteratorit=upFloorList.iterator(); while(it.hasNext()){ intfloor=(int)it.next(); System.out.print(floor+"层重量:"+storeyWeight[floor-bottomFloor]+""); } System.out.println(); } return; } } } //下行 if(downFloorList.size()>0){ System.out.println("---电梯下行---"); for(inti=nowFloor-1;i>=bottomFloor;i--){ Thread.sleep(500); System.out.println("---第"+i+"层---"); if(downFloorList.contains(i)){ System.out.println("☆开门☆"); nowFloor=i; downFloorList.remove(downFloorList.indexOf(i)); storeyWeight[i-bottomFloor]=0; if(downFloorList.size()>0){ System.out.println("剩余所选层数为:"); Iteratorit=downFloorList.iterator(); while(it.hasNext()){ intfloor=(int)it.next(); System.out.print(floor+"层重量:"+storeyWeight[floor-bottomFloor]+""); } System.out.println(); } return; } } } System.out.println("无客"); } }
2.2程序入口
packagecom.company; importEle.Elevator; importjava.util.Scanner; publicclassMain{ publicstaticvoidmain(String[]args)throwsInterruptedException{ //创建一个电梯 intbottomFloor=1;//最低层1楼 inttopFloor=12;//最高层12楼 intcapacity=1000;//最大承重1000 Elevatorelvator=newElevator(bottomFloor,topFloor,capacity); System.out.println("当前电梯可选择"+bottomFloor+"-"+topFloor+"层,请选择楼层数(输入-1表示关闭电梯门):"); //输入内容 Scannerscanner=newScanner(System.in); while(scanner.hasNextLine()){ //如果输入不是数字,提示后,再次输入 if(!scanner.hasNextInt()){ System.out.println("请输入数字!"); scanner.next(); } //输入是数字则进行以下操作 else{ intnum=scanner.nextInt(); //若输入数字为-1,意为结束输入,启动电梯 if(num==-1){ System.out.println("------------------------"); System.out.println("电梯门关闭,开始启动"); elvator.StartElevator(); }elseif(num>topFloor||num三、总结
这个简易电梯程序,基本实现了电梯的上行和下行判断,当选择多个楼层时,可以对同为上行或下行的目标楼层自动排序依次到达,每个目标楼层会随机生成乘客重量并记录。
在写这个程序时,遇见了一些问题:
1.使用while语句接收用户输入时,判断输入是否为数字,输入不是数字会陷入死循环提示。在此增加了scanner.next()语句,提示后可以继续输入。
if(!scanner.hasNextInt()){ System.out.println("请输入数字!"); scanner.next(); }2.若重复选择某楼层,到达该楼层后,仍会显示该楼层为剩余楼层。在此增加了判断语句,如果选择的楼层数已经存在于上升或下降目标楼层的集合中,则只增加重量,不会重复添加目标楼层。
if(!upFloorList.contains(floorNum)&&!downFloorList.contains(floorNum)){ if(floorNum>nowFloor){ upFloorList.add(floorNum); //上升楼层升序排序 Collections.sort(upFloorList); }else{ downFloorList.add(floorNum); //下降楼层降序排序 downFloorList.sort(Collections.reverseOrder()); } } }3.将目标楼层随机产生的重量存放于一个数组中,当前楼层减最低层,就是当前层重量的下标,假如当前楼层为5楼,5楼下标就是5-1=4,storeyWeight[4]即为5楼重量。
代码还有不完善的地方,例如若从1到8层上升时,6层有人也要乘坐电梯,如何满足在6层停止并上人后,继续上行。这些还有待我继续完善,也望请大家批评指正
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。