哈工大软件构造LAB1小结

  经过整整五天的高强度开发,我终于完成了软件构造的第一次实验。下面我谈一谈我个人的一些实验时的思路和实验后感受,希望能对在实验中遇到困难的学弟学妹们有帮助。

  首先是第一个实验magicsquare。其主要任务是从文件中读取一个矩阵,判断其是否为幻方,还有对一个产生幻方的程序写注释(实际上就是读明白这个程序)。

  首先要知道幻方的定义,这里建议查看百度百科

https://baike.baidu.com/item/%E5%B9%BB%E6%96%B9/169544?fr=aladdin

(百度百科里幻方的产生会对读产生幻方程序有很大帮助)

  这里给一下我的思路:先假定其是正常的矩阵,先读第一行的字符串,把所有分隔符去掉后,根据字符串长度决定读取多大的矩阵(n个字符读n*n矩阵),然后判断是否合法,合法的话分别计算每行每列和两个对角线的总共2n+2个值,并算其是否相等。

  本次任务的难点在判断矩阵是否合法,要考虑行数和列数不等的情况

  如3*3矩阵中间一行少一个数:

* * *

* *

* * *

  3*3矩阵多一行之类的情况(当然情况会更复杂,我只是随便举两个例子)。还有分隔符不是\t的情况。

  中间一行少一个数的情况我的解决方案是一行一行的读矩阵,同时每读一次计算一次读了几个数,如果和第一行的不一样,提示错误并返回false。

  多出(少)一行的情况我的解决方案是把数据放在n*n矩阵后重读一遍,若行数不为n则不合法。

  总之第一个任务还算是简单的,就是从零构造有点烦人。

  第二个任务是给一个java版本的海龟库(学过Python的同学应该知道海龟库是什么东西,简单来说是一种画图软件),要你按照他提供的库来完成各个任务。

  这个任务比较像填空题,只需要按照规约,编写一些函数即可,个人认为其较易上手。直到第6个任务为止都很简单,第6个任务稍微有点难度但还好,第七个任务是本任务中最难的一部分,是一道关于凸包的题目(凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点)。简单说一下我的思路:取最“右下角”的点,设为p1,如果点数小于四,直接返回点集合;若不小于4,则设立一个凸包集合,最开始只有p1,然后在原来的点集合(副本)中把p1去掉。然后p1在原来的点集合中找需要转动角度最小的点,把其加入凸包集合里。若有两个以上转动角度最小的点,取离p1最远的点。然后把这个新加入的点设为新的p1。在第二轮循环时,把最开始从原来集合副本中去掉的p1加回到原来集合副本,这样当再次访问这个点时,说明凸包集合构造完毕,返回之。(本质是贪心算法)

  第三个任务是一个人际关系网的实验,主要考验新建类和构建方法的能力。任务要求不太详细,有很多细节需要自己补充。这个任务最有挑战性的是getDistance部分。不同人有不同的思路,我的思路如下:

  采用BFS,定义开始的点距离为0,用一个新队列distance来存,然后每一个新节点入队列,其距离都较父节点加1(父节点的距离在出队的时候也一并从distance中出队了)。当节点相同时,返回e.distances。否则说明两点不连通,返回-1。

  这就是我对实验的一些思考和感想,希望能够有所帮助。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源中直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值