一、思路

写一个简单的电梯系统,首先根据老师提供的需求,写一下基础思路:

电梯有最高层和最低层,输入数字选择正确楼层数

输入数字大于当前楼层,则为上行;小于当前楼层,则为下行

每次输入数字的时候,需要对同为上行的数字或者同为下行的数字,进行排序

所输入的目标楼层用集合存放,循环最低层到最高层,如果当前层在集合中存在,显示开门,若还有目标楼层,则关门,继续到下一目标楼层。

当选择一个目标楼层,会生成随机重量记录在目标楼层,上行用原来重量加上目标楼层重量,下行则用原来重量减去目标楼层重量

二、实现

2.1 电梯类

1 packageEle;2

3 importjava.util.ArrayList;4 importjava.util.Collections;5 importjava.util.Iterator;6 importjava.util.List;7 importjava.util.Random;8

9 public classElevator {10 private List upFloorList = new ArrayList(); //上升楼层

11 private List downFloorList = new ArrayList(); //下降楼层

12 private int[] storeyWeight; //目标层重量

13 private int capacity; //电梯最大重量

14 private int topFloor; //电梯最高层

15 private int bottomFloor; //电梯最底层

16 private int nowFloor = 1; //当前层

17

18 public Elevator(int bottomFloor, int topFloor, int capacity) { //有参构造方法

19 this.topFloor =topFloor;20 this.bottomFloor =bottomFloor;21 this.capacity =capacity;22

23 //当前楼层减最低层,就是当前层重量的下标 假如当前楼层为5楼,5楼下标就是 5-1 = 424 //初始化目标楼层重量,数组大小 = 最高层 - 最低层 + 1

25 storeyWeight = new int[(topFloor - bottomFloor + 1)];26 }27

28 //设置楼层

29 public void SetFloor(intfloorNum) {30 //如果 所选楼层 与 所在楼层 相同,则提示

31 if (floorNum ==nowFloor) {32 System.out.println("请选择其它楼层");33 return;34 }35

36 //生成90-500之间的随机重量

37 Random random = newRandom();38 int thisFloorWeight = random.nextInt(500 - 90 + 1) + 90;39

40 int sum = 0;41 //目标楼层增加的重量

42 for (int i = 0; i < storeyWeight.length; i++) {43 sum +=storeyWeight[i];44 }45 //原重量+增加重量=当前重量

46 System.out.println("选择" + floorNum + "楼乘客重量:" + thisFloorWeight + ",此时总重:" + (sum +thisFloorWeight));47

48 //如果 目标楼层总重量 > 最大重量,提示

49 if (sum + thisFloorWeight > this.capacity) {50 System.out.println("超重了哟");51 return;52 }53

54 //当前输入楼层重量加上该楼层新增加重量 后的重量

55 storeyWeight[floorNum - bottomFloor] +=thisFloorWeight;56

57 //如果输入楼层数 已经在上升或下降楼层的集合中,则只新增重量,不添加楼层

58 if (!upFloorList.contains(floorNum) && !downFloorList.contains(floorNum)) {59 if (floorNum >nowFloor) {60 upFloorList.add(floorNum);61

62 //上升楼层升序排序

63 Collections.sort(upFloorList);64

65 } else{66 downFloorList.add(floorNum);67

68 //下降楼层降序排序

69 downFloorList.sort(Collections.reverseOrder());70 }71 }72 }73

74 //上升:从所在层到所选楼层中的最高层75 //下降:从所在层到所选楼层中的最低层76 //获得集合中最后一个元素:list.get(list.size()-1);77

78 //启动电梯

79 public void StartElevator() throwsInterruptedException {80 System.out.println("当前为 < " + nowFloor + " > 楼");81 //上行

82 if (upFloorList.size() > 0) {83 System.out.println("---电梯上行---");84 for (int i = nowFloor + 1; i <= upFloorList.get(upFloorList.size() - 1); i++) {85 Thread.sleep(500);86 System.out.println("----" + i + "楼---");87 if(upFloorList.contains(i)) {88 System.out.println("---☆开门☆---");89 nowFloor =i;90 upFloorList.remove(upFloorList.indexOf(i));91 storeyWeight[i - bottomFloor] = 0;92

93 if (upFloorList.size() > 0) {94 System.out.print("剩余所选楼层为:");95 Iterator it =upFloorList.iterator();96 while(it.hasNext()) {97 int floor = (int) it.next();98 System.out.print(floor + "楼 重量为 " + storeyWeight[floor - bottomFloor] + "; ");99 }100 System.out.println();101 }102 return;103 }104 }105 }106

107 //下行

108 if (downFloorList.size() > 0) {109 System.out.println("---电梯下行---");110 for (int i = nowFloor - 1; i >= bottomFloor; i--) {111 Thread.sleep(500);112 System.out.println("----" + i + "楼---");113 if(downFloorList.contains(i)) {114 System.out.println("---☆开门☆---");115 nowFloor =i;116 downFloorList.remove(downFloorList.indexOf(i));117 storeyWeight[i - bottomFloor] = 0;118 if (downFloorList.size() > 0) {119 System.out.print("剩余所选楼层为:");120 Iterator it =downFloorList.iterator();121 while(it.hasNext()) {122 int floor = (int) it.next();123 System.out.print(floor + "楼 重量为 " + storeyWeight[floor - bottomFloor] + "; ");124 }125 System.out.println();126 }127 return;128 }129 }130 }131 System.out.println("无客");132

133 }134 }

2.2 程序入口

1 packagecom.company;2

3

4 importEle.Elevator;5

6 importjava.util.Scanner;7

8 public classMain {9

10 public static void main(String[] args) throwsInterruptedException {11 //创建一个电梯

12 int bottomFloor = 1; //最低层1楼

13 int topFloor = 12; //最高层12楼

14 int capacity = 1000; //最大承重1000

15 Elevator elvator = newElevator(bottomFloor, topFloor, capacity);16

17 System.out.println("当前电梯可选择" + bottomFloor + "-" + topFloor + "层,请选择楼层数(输入-1表示关闭电梯门):");18

19 //输入内容

20 Scanner scanner = newScanner(System.in);21 while(scanner.hasNextLine()) {22 //如果输入不是数字,提示后,再次输入

23 if (!scanner.hasNextInt()) {24 System.out.println("请输入数字!");25 scanner.next();26 }27

28 //输入是数字则进行以下操作

29 else{30 int num =scanner.nextInt();31 //若输入数字为-1,意为结束输入,启动电梯

32 if (num == -1) {33 System.out.println("------------------------");34 System.out.println("电梯门关闭,开始启动");35 elvator.StartElevator();36 } else if (num > topFloor || num < bottomFloor || num == 0) {37 //若输入数字不符合楼层数,则提示并再次输入

38 System.out.println("请选择" + bottomFloor + "-" + topFloor + "层");39 } else{40 elvator.SetFloor(num);41 }42 }43 }44 }45 }

三、展示

1. 乘客选择楼层,输入-1表示结束选择。(乘客重量为随机产生)

2. 电梯从高到低或从低到高顺序 依次到达,每到达一目标层,都需输入-1关门,电梯继续运行 至下一目标楼层

3. 当无选择楼层 ,直接输入-1 关门时,显示当前楼层,提示无客

4. 当选择楼层与当前所在楼层一样时,提示

5. 当选择楼层不符合电梯最高最低楼层设置时,提示

四、总结

这个简易电梯程序,基本实现了电梯的上行和下行判断,当选择多个楼层时,可以对同为上行或下行的目标楼层自动排序依次到达,每个目标楼层会随机生成乘客重量并记录。

在写这个程序时,遇见了一些问题:

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楼停止并上人后,继续上行。这些还有待我继续完善,也望请大家批评指正

*转载需标明出处

电梯java_基于Java的电梯系统相关推荐

  1. 抽奖功能java开发_基于Java实现抽奖系统

    摘要:这篇Java开发技术栏目下的"基于Java实现抽奖系统",介绍的技术点是"抽奖系统.Java.抽奖.基于.系统.实现",希望对大家开发技术学习和问题解决有 ...

  2. 基于JAVA宠物托管系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA宠物托管系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA宠物托管系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软 ...

  3. 基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  4. 基于JAVA汽车租赁系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA汽车租赁系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA汽车租赁系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软 ...

  5. 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署

    基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  6. 基于JAVA汽车租赁系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA汽车租赁系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA汽车租赁系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  7. 基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  8. 基于JAVA汽车租赁系统 (Springboot框架) 开题报告

      本科生毕业论文 基于Java(springboot框架)汽车租赁系统 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本科生毕业 ...

  9. 基于java的oa协同办公系统_基于JAVA的OA系统的制作毕业设计论文

    <基于JAVA的OA系统的制作毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于JAVA的OA系统的制作毕业设计论文>相关文档资源请在帮帮文库(www.woc8 ...

最新文章

  1. linux计划任务作业
  2. Linux 内核详解以及内核缓冲区技术
  3. 第三章:3.5 傅里叶变换
  4. SpringMVC学习笔记四:数据绑定
  5. 我爱工程化 之 gulp 使用(一)
  6. 微信小程序css3动画怎么写,微信小程序动画课程-通过wxss(css)来实现-animation 属性...
  7. 免费12个月!阿里云助力中小企业0成本上云
  8. JEECG Online Coding 开发流程
  9. Python刷题-1
  10. 万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。 - 今日头条(www.toutiao.com)...
  11. FRR BGP协议分析11 -- ZEBRA初始化
  12. html实现网页多人聊天,实现websocket多人聊天,很简单(示例代码)
  13. securecrt 远程映射端口
  14. 悖论对计算机科学影响,科学界最著名的几大悖论,你能解释吗?
  15. 3、浙江移动网页Post登陆分析RSA算法【Post/Js逆向笔记】
  16. html使用highcharts绘制饼图,饼图.html · 赵文博/Highcharts - Gitee.com
  17. 你的压力狗狗懂,通过闻味就知道!英国学者做实验论证,专门收集人做数学题时的气味...
  18. 《互联网+ 电商平台设计与运营》一一1.3 “互联网+”幕后的商家生态
  19. 7-42 sdut-循环-3-评委评分(II)
  20. 【2020算法练习一】笔试选择题 快手2020校园招聘秋招笔试--算法A试卷

热门文章

  1. 专访 | 「Smartbi 」VP徐晶:未来,BI将成为决策者的诸葛亮
  2. 陆奇、雷军、熊晓鸽聊疫情后的创业风口
  3. 漫画:为什么生僻字计算机上打不出来,或者打出来也无法显示呢?
  4. 强化学习是人工智能的未来?
  5. 每秒 10 万并发的 BI 系统如何频繁发生 Young GC?
  6. “数”有专攻、智“汇”武汉,周末技术沙龙Call你来!
  7. Linux 进入 5.0 时代!
  8. 程序员爬虫竟构成犯罪?
  9. 一文教你如何用 Python 将 iPhone “玩弄于股掌之中”!
  10. 谁在杀死Facebook?谁该为我们负责?