欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象初调用:foolish 电梯

发布时间:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 面向对象初调用:foolish 电梯 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

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

  • 输入我们使用主类,虽然输入是来自电梯类与楼层类,但是作为两处输入太过于麻烦,所以我们使用主类输入
  • W_legal类,该类作为对于输入的第一层判断,也就是简单的过滤一些不合法输入
  • Demand类,该类也是作为对于输入的判断,将所有不合法的输入过滤,得到是正确的请求队列
  • Scheduler类,该类就调度器类,在该类中判断是否是同质请求,同时时间与队列是该类的关键的两个属性,时间用于判断当前类的请求时间与当前时间的大小,请求队列用于判断是否执行结束
  • Elevator类,该类就是电梯类,接收来自调度器的指令,然后执行该指令,该类中的方法change()意思就是执行指令,然后改变电梯的运行状态,然后返回状态给调度类
  • 对于该想法,本来我也觉得天衣无缝,只可惜还是有漏网之鱼,先列出自己的bug吧:

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

     

  • 对于自己想法的优化:

  • 最需要优化的地方当然是输入,所以第三次作业在下重写写了一个输入,具体见第三次作业,
  • 如果还有什么要优化的话那就是代码风格吧
  • 为了纪念自己第一次使用面向对象的方法来实现这个作业,容我贴一点核心代码

    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++;}

     

    转载于:https://www.cnblogs.com/wevolf/p/8682577.html

    总结

    以上是生活随笔为你收集整理的面向对象初调用:foolish 电梯的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。