• 面向对象初调用:foolish 电梯


    本周我们完成的任务是傻瓜电梯的调度,对于那十分十分详细的指导书,我感觉想要说明白题目要求,是做不到的,所以就把指导书贴出来给大家看了,,由于在下还不会网页制作,只能通过百度网盘了,https://pan.baidu.com/s/12KLXnQa9ifh1hZQrvqhjAw/pdf争取下次用网页吧,虽然不知道什么时候才能学会。

    看完题目我们开始分析吧,

    从最直接的角度分析就是请求与调度的关系,直接点就是,发出请求,然后处理请求,将所有合法请求过程构成请求队列,调度器处理一个请求就是根据当前电梯状态发出一条指令,然后电梯运行该条指令,然后更新电梯的状态,然后返回状态只调度器,直到执行完最后一条指令。所以按照思想构造出五个类,但这次作业,在下并没有完全按照要求写,虽然是五个类,但是五个类的作用并不是完全按给出的建议。首先说一下几个类的功能:

    1. 输入我们使用主类,虽然输入是来自电梯类与楼层类,但是作为两处输入太过于麻烦,所以我们使用主类输入
    2. W_legal类,该类作为对于输入的第一层判断,也就是简单的过滤一些不合法输入
    3. Demand类,该类也是作为对于输入的判断,将所有不合法的输入过滤,得到是正确的请求队列
    4. Scheduler类,该类就调度器类,在该类中判断是否是同质请求,同时时间与队列是该类的关键的两个属性,时间用于判断当前类的请求时间与当前时间的大小,请求队列用于判断是否执行结束
    5. Elevator类,该类就是电梯类,接收来自调度器的指令,然后执行该指令,该类中的方法change()意思就是执行指令,然后改变电梯的运行状态,然后返回状态给调度类

    对于该想法,本来我也觉得天衣无缝,只可惜还是有漏网之鱼,先列出自己的bug吧:

    1. 对于输入,我依旧采用了第一次作业方法,对输入使用find(),错误……,导致只要存在符合条件的输入就会执行,而忽略了必须是完全匹配的条件
    2. 对于数字的判断,题目的要求是4字节的整数,由于在java中是不存在unsigned类型的数据类型的,也就意味着,我们的数字最大位2^32-1,而不是2^31-1,所有数据类型要是long类型,我都是这么写的,但是还是错了,那么错误在哪里呢?本来在使用下面的这个方法时要注意一点时,一定要是有try catch,除非你事先确定了数据的位数
    3. max = Long.parseLong("4294967295");

    对于自己想法的优化:

    1. 最需要优化的地方当然是输入,所以第三次作业在下重写写了一个输入,具体见第三次作业,
    2. 如果还有什么要优化的话那就是代码风格吧

    为了纪念自己第一次使用面向对象的方法来实现这个作业,容我贴一点核心代码

    request_new.request_old = legal_1.num;
            request_new.deal();  //得到一个队列,队列中是按时间顺序的请求都是合法请求
            sche.request_n = request_new.request1;
            sche.fetch();
            while(sche.request_n[sche.i][0]!=0) {
                sche.state_c = elev.state;
                sche.stop_time = elev.st_time;
                sche.deal_t();
                elev.move = sche.instr_o;
                elev.change();
                sche.i++;
            }    
  • 相关阅读:
    02_Python基础
    python 学习网站
    Docker搭建MySQL服务
    Ubuntu源、Python虚拟环境及pip源配置
    Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法
    MySQL 数据库
    数据库连接池
    ssm整合开发的相关步骤和增删改查
    Springmvc执行流程
    资源映射之----在springmvc中如何访问WEB-INF目录下的文件和系统文件夹中的文件
  • 原文地址:https://www.cnblogs.com/wevolf/p/8682577.html
Copyright © 2020-2023  润新知