由于本次是实现jml格式的写法,只需要阅读EmojiMessage,Group,Message,Network,NoticeMessage,Person,RedEnvelopeMessage,Runner进行编写
主要实现了错误抛出的几中MyException,以及Mainclass Mygroup,MyEmojiMessage,等如下图
在主要类的实现方法中,大部分是由给出的jml格式直接写出。在三次作业中,第一次中判断是否联通的isCircle()方法,选用了最简单的广度优先遍历。大概看了一下并查集的方法,由于懒,并没有做设计优化。第三次作业中的sendIndirectMessage()方法也采取了最简单的迪杰斯特拉算法。对于message 在person 类中,我并没有新建立一个容器,将容器排序,而是建了一个由固定大小为4的容器,每次新加入message时,将最后面的弹出,把其添加在队首即可。
首先在基本了解JML语法的基础上,通读JML规格,了解规格希望实现的内容
只要选用了合适的容器,方法直接调用容器的相应方法即可实现。
理解相应类之间的联系,实现规格定义的方法。
除了person中的messages用到了ArrayList 其他都用了HashMap
因为HashMap可以满足其他的要求,但是HashMap是没有顺序的,Messages需要排序 所以用到了 ArrayList
HashMap可以以很快的效率实现增,删,查,改
通过建立id到自身的HashMap可以很快的查找某一类的实例
不要像我一样犯懒,isCircle()只用广度优先,因为这样在重复查询的时候,你会发现非常耗时。而用并查集的方法,可以将之前查过的路径存起来,不需要在再用到的时候再次查询
sendIndirectMessage()方法 进行了堆优化,用到了优先队列。
原文:https://www.cnblogs.com/n1085094773/p/14838858.html