一、思路

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

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

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

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

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

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

二、实现

2.1 电梯类

package Ele;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

import java.util.List;

import java.util.Random;

public class Elevator {

private List upFloorList = new ArrayList(); // 上升楼层

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

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

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

private int topFloor; // 电梯最高层

private int bottomFloor; // 电梯最底层

private int nowFloor = 1; // 当前层

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

this.topFloor = topFloor;

this.bottomFloor = bottomFloor;

this.capacity = capacity;

// 当前楼层减最低层,就是当前层重量的下标 假如当前楼层为5楼,5楼下标就是 5-1 = 4

// 初始化目标楼层重量,数组大小 = 最高层 - 最低层 + 1

storeyWeight = new int[(topFloor - bottomFloor + 1)];

}

// 设置楼层

public void SetFloor(int floorNum) {

//如果 所选楼层 与 所在楼层 相同,则提示

if (floorNum == nowFloor) {

System.out.println("请选择其它楼层");

return;

}

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

Random random = new Random();

int thisFloorWeight = random.nextInt(500 - 90 + 1) + 90;

int sum = 0;

//目标楼层增加的重量

for (int i = 0; i < storeyWeight.length; i++) {

sum += storeyWeight[i];

}

//原重量+增加重量=当前重量

System.out.println(floorNum + "层上来重量:" + thisFloorWeight + ",此时总重:" + (sum + thisFloorWeight));

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

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);

// 启动电梯

public void StartElevator() throws InterruptedException {

System.out.println("当前第 < " + nowFloor + " > 层");

// 上行

if (upFloorList.size() > 0) {

System.out.println("---电梯上行---");

for (int i = 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("剩余所选层数为:");

Iterator it = upFloorList.iterator();

while (it.hasNext()) {

int floor = (int) it.next();

System.out.print(floor + "层 重量:" + storeyWeight[floor - bottomFloor] + " ");

}

System.out.println();

}

return;

}

}

}

// 下行

if (downFloorList.size() > 0) {

System.out.println("---电梯下行---");

for (int i = 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("剩余所选层数为:");

Iterator it = downFloorList.iterator();

while (it.hasNext()) {

int floor = (int) it.next();

System.out.print(floor + "层 重量:" + storeyWeight[floor - bottomFloor] + " ");

}

System.out.println();

}

return;

}

}

}

System.out.println("无客");

}

}

2.2 程序入口

package com.company;

import Ele.Elevator;

import java.util.Scanner;

public class Main {

public static void main(String[] args) throws InterruptedException {

// 创建一个电梯

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

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

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

Elevator elvator = new Elevator(bottomFloor, topFloor, capacity);

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

//输入内容

Scanner scanner = new Scanner(System.in);

while (scanner.hasNextLine()) {

//如果输入不是数字,提示后,再次输入

if (!scanner.hasNextInt()) {

System.out.println("请输入数字!");

scanner.next();

}

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

else {

int num = scanner.nextInt();

//若输入数字为-1,意为结束输入,启动电梯

if (num == -1) {

System.out.println("------------------------");

System.out.println("电梯门关闭,开始启动");

elvator.StartElevator();

} else if (num > topFloor || num < bottomFloor || num == 0) {

//若输入数字不符合楼层数,则提示并再次输入

System.out.println("请选择1-12楼层。");

} else {

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

java电梯管理_基于Java的电梯系统实现过程相关推荐

  1. java 相册管理_基于JAVA的B/S网络相册管理系统

    每天记录学习,每天会有好心情.*^_^* 今天和一个朋友共同完成了一个网络相册管理系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方 ...

  2. java实现一个电梯模拟器_基于Java的捎带电梯系统

    一.思路 写一个简单的电梯系统,首先根据老师提供的需求,写一下基础思路: 电梯有最高层和最低层,输入数字选择正确楼层数 输入数字大于当前楼层,则为上行:小于当前楼层,则为下行 每次输入数字的时候,需要 ...

  3. java图片管理系统_基于Java的图片管理信息系统的设计与实现

    收稿日期:2003 - 05 - 07 作者简介:谭 娜(1978 -) ,女 ,河南济源人 ,硕士研究生 ,主要研究方向为数据库理论与应用. 基于 Java 的图片管理信息系统的设计与实现 谭 娜1 ...

  4. java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)

    基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)(任务书,毕业论文12000字,程序代码,MySQL数据库) 本文分析了基于JAVA的雅思考试管理系统的设计与实现技术,结合实 ...

  5. 五子棋java设计引言_基于JAVA的五子棋游戏系统设计与实现报告.doc

    PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT I 基于JAVA的五子棋游戏系统设计与实现 专 业 电子信息工程 学 生 董永杰 指导教师 曾玉 摘要 PAGE \* ...

  6. java中介系统平台_基于JAVA的房屋中介管理系统的设计与实现.ppt

    基于JAVA的房屋中介管理系统的设计与实现 校友录管理系统 的设计与实现 院系: 华科学院经济与管理系 班级 :电子商务102202H 姓名 :王 爽 学号: 201022120225 指导教师 :王 ...

  7. java课程管理系统_基于JAVA学生课程管理系统.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava 基于JAVA学生课程管理系统.doc62页 本文档一共 ...

  8. java自定义配置文件_基于java读取并引用自定义配置文件

    基于java读取并引用自定义配置文件 首先在resources目录创建自定义的配置文件 配置文件的格式: 写工具类,得到配置参数 import java.io.IOException; import ...

  9. java图片管理系统_基于Java Web技术的图片管理系统的设计与实现.doc

    基于Java Web技术的图片管理系统 的设计与实现 本科毕业设计 目 录 第1章 引言6 1.1 课题研究目的及意义6 1.2 课题研究的内容7 2.1 用户功能需求7 图片收藏数据库查询系统图片收 ...

最新文章

  1. java--static关键字
  2. 网络蜘蛛Spider 工作原理
  3. linux命令学习之:curl
  4. 最简单的docker教程:在docker里运行nginx服务器
  5. 纪中C组模拟赛总结(2019.7.5)
  6. python文件操作完成_基于python的文件操作
  7. Firefox扩展插件开发extension代码调试方法
  8. 分享一种很好看的字体
  9. java .getbytes_java中String的getBytes方法使用
  10. pip安装pytorch清华_镜像安装pytorch的简便方法总结
  11. 清华大学、北京大学毕业生的去向
  12. c语言输出字符的utf码,C语言里如何把GBK码转换为UTF8?
  13. 启动gazebo失败报错[gazebo-1] process has died [pid 10999, exit code 255
  14. BI神器Power Query(4)-- PQ导入动态名称定义的表格
  15. 什么是Rest风格的Api?
  16. [含论文+源码等]微信小程序电影购票+后台管理系统源码
  17. 【python】——爬虫05 初级反爬笔记
  18. Word2007插入目录、更新目录后大纲乱掉和无法保存大纲的解决办法
  19. linksys 打印软件_如何使用Linksys Smart Wi-Fi设置媒体和文件服务器
  20. 用java求解一元四次方程_Java程序设计(十四)----一个求一元二次方程根

热门文章

  1. PEG功能化/修饰/偶联中空二氧化硅纳米球 PEG-Hollow SiO2 nanosphere
  2. 基于迁移深度学习的遥感图像场景分类
  3. 谷粒商城项目学习笔记一
  4. SAP DUMP CALLBACK_REJECTED_BY_WHITELIST - SE51, RSSCREENPAINTER
  5. easyUI下解决前端输入、复制情况下的DOM型Xss漏洞
  6. js双击事件dblclick/ondblclick
  7. mysql查找两表中不同的数据库表_各位大侠怎样查找两张表的里面的数据(这两张表在不同的数据库)...
  8. 四川计算机二级时间安排,2020年9月四川计算机二级考试时间
  9. OCP最成功的项目是什么?许多数据中心硬件从业者都会和它打交道
  10. ISE14.7手把手使用教程:建立工程、仿真、下载bit流、程序固化、以及一些常见的坑