基于Java的电梯系统实现过程
一、思路
写一个简单的电梯系统,首先根据老师提供的需求,写一下基础思路:
- 电梯有最高层和最低层,输入数字选择正确楼层数
- 输入数字大于当前楼层,则为上行;小于当前楼层,则为下行
- 每次输入数字的时候,需要对同为上行的数字或者同为下行的数字,进行排序
- 所输入的目标楼层用集合存放,循环最低层到最高层,如果当前层在集合中存在,显示开门,若还有目标楼层,则关门,继续到下一目标楼层。
- 当选择一个目标楼层,会生成随机重量记录在目标楼层,上行用原来重量加上目标楼层重量,下行则用原来重量减去目标楼层重量
二、实现
2.1电梯类
packageEle;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Random;
publicclassElevator{
privateListupFloorList=newArrayList();//上升楼层
privateListdownFloorList=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。