结对项目电梯吐血总结

摘要:
配对组:林豪森1180邓亚梅1152对于这个编程项目,我只想说对不起,我失败了。直到后来我才发现,结对项目周围的所有人都组建了一个团队,然后我才发现邓亚梅在我和她结对之前还没有组建团队。这个结对项目可以说是我自己的项目,确实违背了初衷。如果电梯到达楼层,请将请求从其自己的请求列表中移出并执行下一个请求。如果没有更多的请求,电梯可以设置为空闲。

结对小组:林豪森1180 邓亚梅 1152

对于这次编程项目,我只想说对不起,我失败了。

修改的程序我放在了一个新建的文件夹中,只能调试通过第一个测试用例。对于后面两个测试点的高峰超载问题还没调试通过。

这是第一个测试点结果:结对项目电梯吐血总结第1张

下面我只能写写自己的失败感受:

1.起步较晚。

  国庆一个假期的确浪费了许多天,基本是过完再着手写这次的项目。

2.与队友交流很少。

  我是后来才发现结对项目附近的人都有组了,然后找了好久才发现邓亚梅没人组队才和她结对的。现在我才明白这没人和她组队的原因。可能是她个人比较腼腆,不善于表达自己的想法,而且男女宿舍不同,接触很少,和她的交流只有那么几次,也只有在qq或短信上交流多点,但她从未主动找我聊天,我实在不知道她到底有什么想法,也不知道她到底投入了多少精力进去。这次的结对项目可以说是我自己一个人的项目,这实在是有违本意。

3.在对于原代码的设计思路还没理清的时候便开始设计调度。

  这是个非常致命的问题,对于原代码的框架和想法还没研究透彻,在许多调度判断上都产生了问题,这也是后来调试时不断产生阻碍的原因,导致了调试工作量庞大。

4.我的设计想法是:

  每次调度时,将当前请求队列中的请求加载入最近的顺路电梯。在调度中添加了一个调度的匹配表,保存电梯和保存加载进该电梯的所有请求的链表。

  那么,调度时每次要做的事情是:

    (1)调度电梯前先判断请求队列中有没请求,有就将内部请求加载入进入的电梯,而外部请求则加载入最近的顺路电梯,若无符合条件的电梯,则将该请求返还至请求队列

    (2)调度每台电梯:

         若该电梯的请求链表中有请求,则电梯在自己的请求链表中寻找最近的一个请求楼层进行运动。

         若电梯抵达该楼层,则将该请求移出自己的请求链表中,执行下一个请求,若无更多请求,则可设置电梯为空闲。

    -顺路:电梯空闲着,则一切可达的外部请求均为顺路;若电梯有一个运动的方向,历史或当前,那么电梯往请求来源的方向要一致,且请求的方向也要一致。

    -最近:若电梯接受的是外部请求,那么电梯与外部请求来源层间的距离为电梯需要运动的距离,若电梯接受的是内部请求,那么电梯与请求的目的层间距离是电梯需要运动         的距离,最近的请求即是电梯需要运动距离最短的请求。

   正因为电梯的调度是根据链表中的请求,该设计无法判断链表中请求是否已经超载,这样是导致后面超载了还能往电梯里加入请求,但是抵达楼层后人却无法进入电梯。

5.思维被调度给固定了。

  在之后我看了其他同学设计的代码,发现有不少是在电梯上做文章,修改后能更容易获取自己想要信息,更加方便进行调度,这也是我没注意到的地方,一直过于关注调度的设计,导致许多时候想要一些信息,但传入调度的数据不足以获取,增加了设计难度。

 6.关于结对编程的看法:

  优点:

  结对编程中的互相交流可以减少编程的错误,在编程的时候,大家一起检查错误,一起分析有没有更加合理的编写方法。

  可以交流想法,可以一起探讨更加好的算法,提高算法的质量。

  队员可以交替编写程序,将任务分散,更高效的利用时间。

  缺点:

  需要一定的磨合期,需要熟悉对方的编写习惯,有许多编写的格式,命名等等问题。

  修改时,要写好注释,让对方知道自己程序的含义。

  需要相互交流,若交流较少,会阻碍程序的设计进度。

  

7.设计方法:

  信息的隐藏:程序的封装性,在之前的面对对象课程上也学习过,对于面向对象的程序设计而言,信息隐藏是一种重要的软件开发手段,它与对象的封装与模块化密切相关。这是为了保证程序的安全性,保证程序的内部信息不会被随便的获得和改写,这使得程序变得更加具有独立性,高内聚,面向对象的特征更加明显,类与类之间的交流无法直接对对方的属性内容进行操作,只能通过类所提供的方法。

  接口设计:接口的设计能方便获得父类的基本属性信息,能为继承类提供一个基本框架,通过接口完成相互独立的模块之间的信息传递,很好的保护了程序的封装性,我们也能通过接口快速访问继承该接口的类的功能。

  松耦合:程序模块间的依赖性低,模块间通过信息交互来联系,设计类时不用过于担心破坏其他类的问题,修改调试时可以方便定位,简单修改某个出错模块即可,不影响其他模块。

8.契约式编程:

  契约的概念很简单——它只是必须为真的表达式。如若不然,契约就被违反,那么按照定义,程序中就一定有 bug 。契约构成了程序规格说明的一部分,只不过是从文档中挪到了代码中。就像每个程序员所知道的那样,文档通常是不完整的、过时的、错误的或者是不存在的。将契约挪到代码中就使得契约变得可对程序验证了。

  这是保证程序中模块方法正确性的重点,也是我没有做好的地方,许多方法的处理比较模棱两可,产生了许多问题,导致调试工作量多,影响工作进度。

免责声明:文章转载自《结对项目电梯吐血总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇个人阅读作业3SVG实现描边动画下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

LeetCode234.回文链表

题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val &...

数据结构实验之链表二:逆序建立链表

数据结构实验之链表二:逆序建立链表 Description 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据。 Input 第一行输入整数N;; 第二行依次输入N个整数,逆序建立单链表。 Output 依次输出单链表所存放的数据。 Sample Input 10 11 3 5...

链表相交 走完自己的路去走他人的路 总会相交

面试题 02.07. 链表相交 难度简单36收藏分享切换为英文关注反馈 给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。 示例 1: 输入:intersectVal = 8, listA = [...

epoll(2) 源码分析

epoll(2) 源码分析 文本内核代码取自 5.0.18 版本,和上一篇文章中的版本不同是因为另一个电脑出了问题,但是总体差异不大。 引子留下的问题 关键数据结构 提供的系统调用 就绪事件相关逻辑 epoll 间的相互影响及处理 问题的解答 引子留下的问题 在上一篇文章中留下了几个问题,本文将针对这几个问题进行分析: epoll(2) 得到就绪事件的...

leetcode19:删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? ==========================...

链表?

1、什么是链表?链表是物理存储单元上非连续的、非顺序的存储结构,不同于栈和队列。链表由一系列节点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相...