第五次作业及第六次作业未能顺利完成,在这里不再赘述。
第七次作业:
类图:
本次作业所需要完成的是一个出租车的模拟乘客呼叫与应答系统。在本次作业中,除去提供的GUI内容,我一共编写了7个类。
GetRequest类作为主类,负责获取地图以及请求,并完成各项初始化要求。地图的输入采用文件输入,在地图不符合要求时会报错并退出程序,请求的输入采用控制台输入,对请求的格式检查采用正则匹配的方式,若请求不合乎规范则会输出格式错误的提示,并跳过该请求。
Request类是请求类,储存了一条请求的各类信息,并用于发出请求信号,监测请求范围内是否有符合要求的出租车,并对出租车进行筛选。同时创建计算线程用于计算该请求出发点和目的地到其他各点的最短距离,以供筛选出租车及出租车寻路使用。
Calculate类是计算类,用于计算请求出发地与目的地到地图其余各点的最短距离,只由请求线程创建作为请求线程的子线程。
Taxi类是出租车类,储存出租车的各类信息,同时由请求类分派请求。在等待服务状态进行随机运动,且每20s休息1s。在接单之后,根据计算类已算出的各点的最短距离,按照最短距离减少的规律来搜索最短路径。
Print类、Taximessage类和Pointmessage类均用于储存所需输出的数据,其中Print类用于储存所需输出的所有数据,并进行文件输出;Taximessge用于存储请求发出过程中所有响应的出租车信息;Pointmessage类用于存储出租车在完成请求过程中经过的各点及时间。
bug分析:本次作业在完成过程中忽略了请求出发地和目的地相同的情况,属于失误型的bug;而在设计问题上,由于要考虑代码的执行效率,使用真实的系统时间模拟会产生较大误差,所以采用模拟时间来进行模拟,单也因此会与请求的真实完成情况存在出入。
感想与体会:
多线程设计的学习,对于Java编程技术不甚精通的我确实是一个很大的挑战,多线程操作所要考虑的安全性,以及在模拟时间时需要考虑代码所需的运行时间,这些都给我带来了不小的困难。但是多线程设计也让我看到了更多的可能性,这样的编程方式使得我过去难以解决的问题得以解决,让我开辟出一种新的编程思路。