设计一个单布电梯运行控制系统

package lanrendianti;

public class Elevator {
    private String mode;   //电梯模式属性 ,ER,FR
    private String direction;  //电梯状态属性,up,DOWN,STILL
    private Double sendtime;  //用户发起请求时间
    private Double endtime=0.0;  //代你提结束云兄时间
    private int nowfloor=1;  //电梯当前所在的楼层,初始化为1
    private int aimfloor;    //电梯所要到的目标楼层
    public void setmode(String mode) {  //设置模式
        this.mode = mode;
    }
    public void setdirection(String direction) { //设置状态
        this.direction = direction;
    }
    public void setsendtime(double sendtime) {  //设置发起请求时间
        this.sendtime = sendtime;
    }
    public void setendtime(double endtime) { //设置电梯结束运行时间
        this.endtime = endtime;
    }
    public void setnowfloor(int nowfloor) {  //设置电题当前所在楼层
        this.nowfloor = nowfloor;
    }
    public void setaimfloor(int aimfloor) { //设置电题所要到达的目标楼层
        this.aimfloor = aimfloor;
    }

//相面六个方法分别为得到电题相应的6个属性值的方法
    public String getmode() {
        return this.mode;
    }
    public String getdirection() {
        return this.direction;
    }
    public Double getsendtime() {
        return this.sendtime;
    }
    public Double getendtime() {
        return this.endtime;
    }
    public  int getnowfloor() {
        return this.nowfloor;
    }
    public int getaimfloor() {
        return this.aimfloor;
    }
}

import java.util.LinkedList;

public class Main {
    public static void main(String[] args) {      //程序入口
        Input input = new Input();
        LinkedList<String> list = input.getList();    //new一个Input对象,在getlist()方法中输入命令command,放到list中
        RequestsQueue requestsqueue = new RequestsQueue();  //new一个存储着用户名令的电梯请求队列对象
        while(true) {
            if(list.isEmpty()==true) list = input.getList();   //得到一个用户输入的有效命令
        
            String[] command = input.inputchange(list.poll());    //从list中取出一个命令,并在inputchange()方法中把它简化一下
            
   
            Elevator elevator = new Elevator();   //new一个电梯对象
            if(command[0].equals("FR")) {    //如果是对于在电梯外请求的用户的服务
                System.out.println("***");    
                elevator.setmode(command[0]);  
                elevator.setaimfloor(Integer.valueOf(command[1]));
                elevator.setdirection(command[2]);
                elevator.setsendtime(Double.valueOf(command[3]));   //把用户输入的命令中得出4个信息,并把相应的值存放到一个电梯对象里
                requestsqueue.add(elevator);  //把存有用户请求命令的电梯放到电梯请求队列里,等待服务
            }
            else if(command[0].equals("ER")) {      //如果三对于在电梯内请求的用户的服务
                elevator.setmode(command[0]);
                elevator.setaimfloor(Integer.valueOf(command[1]));
                elevator.setsendtime(Double.valueOf(command[2]));    //把用户输入的3个信息,并把相应的值存放到一个电题对象里
                requestsqueue.add(elevator); //把存有用户请求命令的电梯放到电梯请求队列里,等待服务
            }
            else System.out.println("ERROR");     //如果吉布森电梯外请求,也不是电梯内请求,那就是不合法的请求,直接输出错误即可
            Solve.error();    //开始让Solve对象做解决操作,即根据相应的命令数据信息,得到运行输出结果
        }
        
    }
}

public class Floor {
  private int maxFloor=10;  //电梯最高楼层数殉国,初始化为10
  private int minFloor=1;   //电梯最低楼层数殉国,初始化为1
  private void setmaxFloor(int maxFloor) {    //设置最高楼层属性方法
      this.maxFloor = maxFloor;
  }
  private void setminFloor(int minFloor) {  //设置楼层最低属性方法
      this.minFloor = minFloor;
  }
  private int getmaxFloor() { //得到最高楼层数
      return this.maxFloor;
  }
  private int getminFloor() {  //得到最低楼层数
      return this.minFloor;
  }
}

import java.util.LinkedList;
import java.util.Scanner;

import javax.swing.text.html.HTMLDocument.Iterator;

public class Input {   //该类的功能三让哟玫瑰湖输入命令和简化用户输入的命令
    String[] inputchange(String s) {     //命令简化
        
        s = s.replaceAll(" ", "");    //去掉多余的空格
       
        s = s.replaceAll("\\(|\\)", ""); //去括号
        String[] s1 = s.split(",");  //用都好将肌肤穿进行切割成String数组
        
        return s1;  //把结果返回
    }
    public LinkedList<String> getList(){    //让当前用户输入命令
        Scanner sc = new Scanner(System.in);
        LinkedList<String> list = new LinkedList();
        while(true) {
            String Command=sc.next();
            if(Command.equals("RUN")) {  //RUN输入结束的标志,breakjike1
                break;
            }else {
                list.add(Command); //把该用户居输入的所有,imhling1寸放到一个链表里
            }
        }
        
        return list;        //返回该用户输入的所有命令
    }
    
}

import java.util.LinkedList;
import java.util.Queue;

public class RequestsQueue {
    private static Queue<Elevator> queue = new LinkedList<Elevator>();  //存放电梯请求队列,里面的元素三存放了用户命令信息的电梯
    public void add(Elevator elevator) {  //往队列里添加电梯元素
        queue.offer(elevator);
    }
    public Elevator peek() {  //查找元素
        return queue.peek();
    }
    public Elevator poll() { //取出一个元素
        return queue.poll();
    }
}

public class Solve {  //该类主要实现解决得出最后运行结果的功能呢个
    //该方法主要三针对FR请求的相关计算和判断
    public static String FRSolve(String direction, Integer aimfloor, double sendtime,Integer nowfloor,double endtime) {
        Elevator elevator = new Elevator();  //new一个电梯对象
        if ((aimfloor == 1 && direction.equals("DOWN"))) {  //用户当前在1楼,但请求三项下,不合理
            return "ERROR1";
        } else if ((aimfloor == 10 && direction.equals("UP"))) { //用户当前在10楼,但请求三项上,不合理
            return "ERROR2";
        } else if (endtime > sendtime) {  //拥护发出请求的时间电梯还在为上一个拥护据服务,没办法来服务放弃请求的用户,不合理
            System.out.println(endtime + " " + sendtime);
            return "ERROR3"; 
        } else {  //以下三合里的情况,有3种
            if (aimfloor == nowfloor) {  //目标楼层等于当前所在楼层,电梯相当于不懂,STILL
                sendtime += 1f;   //电梯结束运行时间要加上1,即电梯开关门时间
                //更新电梯的相应属性值
                endtime = sendtime;  
                elevator.setendtime(endtime);
                elevator.setnowfloor(nowfloor);
                return "STILL";
            }
            sendtime += Math.abs(aimfloor - nowfloor) * 0.5;  //不精致的护士用电梯速度*楼层茶树,得到电梯为该用户服务所需要花费的时间按
            //更新电梯结束运行时间按
            endtime = sendtime;  
            if (nowfloor < aimfloor) {   //电梯项上走了的情况,即UP
                //做更新
                nowfloor = aimfloor;
                elevator.setnowfloor(nowfloor);
                elevator.setendtime(endtime);
                return "UP"; 
            } else {     //电梯项下走了的情况,即DOWN 
                nowfloor = aimfloor;
                elevator.setnowfloor(nowfloor);
                elevator.setendtime(endtime);
                return "DOWN";
            }
        }
    }
    
    //该方法主要三针对ER请求的相关计算和判断
    public static String ERSolve(Integer aimfloor, double sendtime) {
        Elevator elevator = new Elevator();
        double endtime = elevator.getendtime();
        Integer nowfloor = elevator.getnowfloor();
        if (sendtime > sendtime) {     //电梯正忙,无法服务
            return "ERROR3";
        } else if (aimfloor < 0 || aimfloor > 10) {  //楼层请求不再合里范围内
            return "ERROR4";
        }
        if (nowfloor == aimfloor) {    //电梯相当于不动,即STILL
            //做更新
            sendtime += 1f;
            endtime = sendtime;
            elevator.setnowfloor(nowfloor);
            elevator.setendtime(endtime);
            return "STILL";
        } else {
            sendtime += Math.abs(aimfloor - nowfloor) * 0.5;//计算花费时间爱女
            //跟新结束运行时间
            endtime = sendtime;
            if (nowfloor > aimfloor) {  //向下走了的情况,即DOWN
                //做更新
                nowfloor = aimfloor;
                elevator.setnowfloor(nowfloor);
                elevator.setendtime(endtime);
                return "DOWN";
            } else {  //向上走了的情况,即UP
                //做更新
                nowfloor = aimfloor;
                elevator.setnowfloor(nowfloor);
                elevator.setendtime(endtime);
                return "UP";
            }
        }
    }
    //该方法三对最终运行结果的输出
    public static void error() {
        RequestsQueue requestqueue = new RequestsQueue();
        while (true) {
            String sDirection;
            if (requestqueue.peek() == null) {
                break;
            } 
            else if (requestqueue.peek().getmode().equals("FR")) {  //FR模式的请求
//                System.out.println(requestQueue.peek().getNowFloor());
                Elevator elevator = requestqueue.poll();//从电梯请求队列里取出一个用户的命令
                sDirection = Solve.FRSolve(elevator.getdirection(), elevator.getaimfloor(),
                        elevator.getsendtime(),elevator.getnowfloor(),elevator.getendtime()); //把电题里存放的命令信息作为参数出给FRSolve方法里进行结算和判断
                if (sDirection.equals("ERROR1")) { //不合理的请求或无法服务的
                    System.out.println("ERROR");
                    System.out.println("#1楼不能下。");
                } else if (sDirection.equals("ERROR2")) {
                    System.out.println("ERROR");
                    System.out.println("#顶楼不能上。");
                } else if (sDirection.equals("ERROR3")) {
                    System.out.println("ERROR");
                    System.out.println("#命令发送时间有误。");
                } else { //可以服务的情况
                    System.out.println(  //把计算得到的结果进行输出
                            "(" + elevator.getnowfloor() + "," + sDirection + "," + elevator.getendtime() + ")");
                }
            } 
            else {  //ER模式的请求
                Elevator elevator = requestqueue.poll();  //求出一个用户命令
                sDirection = Solve.ERSolve(elevator.getaimfloor(), elevator.getsendtime()); //调用ERSolve方法进行计算和判读啊
                if (sDirection.equals("ERROR3")) {  //不合礼的请求活无法服务的
                    System.out.println("ERROR");
                    System.out.println("#命令发送时间有误。");
                } else if (sDirection.equals("ERROR4")) {
                    System.out.println("ERROR");
                    System.out.println("#命令目标楼层有误。");
                } else {  //可以服务
                    System.out.println( //把计算的结果进行输出
                            "(" + elevator.getnowfloor() + "," + sDirection + "," + elevator.getendtime() + ")");
                }
            }
        }
    }
}

设计一个简单的单布电梯运行控制系统相关推荐

  1. C#设计一个简单的计算器,实现两个数的加,减,乘,除,求幂等计算,运行效果如下图所示:

    1.题目要求如下: C#设计一个简单的计算器,实现两个数的加,减,乘,除,求幂等计算,运行效果如下图所示: 2.这边需要用到的是VS2019下的C#Windows窗体 3.来吧,展示: using S ...

  2. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  3. java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序

    利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...

  4. 大学慕课MOOC设计一个简单的计算工具

    题目: ‎编程题: ‎设计一个简单的四则运算工具,有一个标题为"计算"的窗口,窗口布局为FlowLayout.设计四个按钮,分别命名为"加"."减&q ...

  5. 如何设计一个简单的KV数据库

    下面的内容仅供设计一个简单的KV数据库.如果想要实现一个功能更强的KV数据库的话,还需要考虑:更加丰富的数据类型.数据压缩.过期机制.数据淘汰策略.集群化.高可用等功能,另外还可以增加统计模块.通知模 ...

  6. 如何设计一个简单的网页

    设计一个简单的网页 1.按住文件新建文本(Ctrl+N),设计一个网页标题,点击创建 2.在<body>内部加入所需要的标签 如图中需要标题标签,水平线标签,段落标签 3.保存(Ctrl+ ...

  7. 用C++设计一个简单的学籍管理系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85930262 资源下载地址:https://download.csdn.net/downl ...

  8. HTML:给自己设计一个简单的专属网页音乐播放器

    Hello,大家好,我是wangzirui32,今天我们来学习如何给自己设计一个简单的网页音乐播放器. 开始学习吧! 学习目录 1. 项目架构 2. player.html 编写 3. style.c ...

  9. 数据结构 图定义和实现 根据郑州轻工业大学的校园平面图设计一个简单的校园导航系统,设计数据结构和算法实现相应功能

    题目:根据郑州轻工业大学科学校区的校园平面图设计一个简单的校园导航系统,设计数据结构和算法实现相应功能.要求所含景点不少于8个(软件学院为其中一个景点).以图中顶点表示学校内各景点,存放景点的名称.景 ...

最新文章

  1. windows 下xampp集成环境安装mongodb扩展
  2. Codeforces Round #514 (Div. 2)题解
  3. Tomcat虚拟目录
  4. Android中最详细的焦点问题,从概念出发带你一点点分享(1)
  5. java aio聊天_JAVA aio简单使用
  6. T-SQL with关键字
  7. DButils入门及结果处理器选择
  8. x5cloud云平台---------------网络彩讯
  9. using编译指令和using声明比较
  10. 用scikit-learn和pandas学习线性回归,XGboost算法实例,用MSE评估模型
  11. 勒索病毒“WannaCry”之复现过程(永恒之蓝)
  12. tiff文件读写等操作(多帧tiff图像保存成的.tif文件)
  13. 【自然语言处理】【对比学习】搞nlp还不懂对比学习,不会吧?快来了解下SimCLR
  14. html a标签属性 rel=‘nofollow‘
  15. 特殊的Excel填充序号技巧,总有一种你会遇到【特别实用,赶紧收藏】
  16. Linux 基础总结,这一篇就够了!
  17. 描写火车站场景_形容车站人多的句子(车站场景写一段话)
  18. C++无法输出txt文件全部内容以及输出出现乱码的解决方法
  19. 搜索引擎搜索特定网站的方法 :site
  20. 设计模式学习——设计模式的七大原则

热门文章

  1. 【无标题】20多年研发经验(含国际一线品牌公司产品研发经历)工程师倾力打造的安卓主板
  2. 德州仪器的12位采样芯片ads1015调试
  3. 推职场社交App满足了谁的需求
  4. 国产化?我们在信创下的改变。。。
  5. 基于机器学习的情感分析
  6. Mysql官网下载过慢问题解决方案
  7. rank函数的使用计算机考试,计算机函数rank的用法
  8. Xilinx ISE 14.7与Modelsim10.1a联合仿真
  9. Cytoscape基础教程笔记
  10. **钢琴科技公司--网站改版计划书