HIT软件构造实验一总结

环境配置

在环境配置上,我主要参考了以下几篇文章,十分详细全面,给以后的学弟学妹们参考
JDK的安装java development kit - 11 - jdk下载安装、环境变量设置
git的安装Git 详细安装教程(详解 Git 安装过程的每一个步骤)
关于上面的git教程,我产生疑惑的两个地方以及解决办法如下
1.下图中将Git Bash 的配置文件添加在windows终端此选项无需勾选。将Git Bash 的配置文件添加在windows终端
2.选择git默认编辑器时选哪个都行,目前使用起来觉得没有必要下notepad++甚至直接使用默认的记事本都可以,目前使用上只是作为每次commit时填写备注的编辑器罢了。选择git默认编辑器eclipse的安装和配置指导书给的参考网站
这个可以直接参考指导书上给的官网,按步骤完4.1即可,但其中有些需要注意的点:
1.进入官网时点击下面这个DownloadPackages选项进行下载,然后选择中国的源,大连东软或者南大都可。后面就很容易。下载选择
2.安装完成后,建议更换背景为黑色,护眼,然后调换成中文字体,这里建议直接百度。
3.其中按照网站调完其他选项后,记得打开窗口-首选项然后如图加入你之前下载的jre,打上小勾勾。
配置
4.Junit是你每次创建项目是要添加的库,如何添加我懒得找链接了,请直接百度。
JAVA教程:菜鸟教程Java
git教程:菜鸟教程git
个人觉得可以直接查看git github那个模块。

实验过程

第一次实验包含了三个小实验。

Magic Squares

个人理解,这个实验需要我们了解魔方矩阵的特性,主要利用了Java String类中的split()方法进行魔方矩阵判断,有一种逻辑设计程序的思维蕴含在里面。同时了解魔方矩阵奇数阵的产生方式,学会应用,分析输入异常数据引发错误的原因。

isLegalMagicSquare()

如何从文件读入是这个部分的一个难点,为了方便后面的判断,我最后采取的方式是逐行读入然后将读取的数据每行加上\n转存到一个ArrayList型对象中。
文件分割上,我利用split(“\n”)将字符串按照行分割存入一个String数组,并且记录行数。
后续判断如下

判断是否被\t分割或者不是一个数组

首先利用split(“\t”)将每行去掉\t后的长度存入一个数组,数组依次遍历,比较每行长度是否相等,如果不等,则统一利用split(“\s |\t”)将每行去掉所有空格和\t后比较长度。如果这个时候还有某相邻两行长度不等,则根本不是一个矩阵,返回错误信息和false。如果此时相邻行长度均相等,则说明最开始的不相等是因为使用了空格分割数据没有使用\t分割数据,返回错误信息和false

判断行列数是否相等

此时已经判断完矩阵是一个完全用\t分割的矩阵,则此时将去掉\t后的长度与行数比较看是否相等,若不相等说明行列数不等,返回错误信息和false

判断是否存在浮点数和负数

逐行遍历字符串数组,利用split(“\.”)split(“-”)判断有无浮点数和负数。若有返回错误信息和false

将字符数组中的数据转存到二维数组里

前面已经检测完了数据异常,然后现在已经确定这是个行列数相等的矩阵,下面需要把数据存入数组,为下面行列和、对角线和的检查做准备。
利用了Integer.valueOf(data[j]).intValue()这个方法进行转存。

行列和、对角线和判断

转存到二维数组后利用双层循环读取数据并累加,其中对角线和由于只有两个,一个是数据横纵坐标都相等的对角线,另一个是数据横纵坐标和再加1等于列数的对角线。求和后首先比较对角线和是否相等,若不相等返回false。相等再继续向下,比较每行和、每列和是否和对角线和相等,若不想等返回false,都相等返回true

generateMagicSquare()

相对简单,可以参考百度百科魔方矩阵。

Turtle Graphics

个人觉得这个实验比较有趣,完全按照参考网站一点一点执行任务就可以,有循序渐进、由简到难的感觉,还有画图的艺术创作,也体现了模块化编程的思想。
problem 1、3、5、6比较简单,经个人检验完全可以独立完成(我属于编程比较菜的类型)。

problem 7:Convex Hulls

感觉这个问题是这个实验的重难点,个人百度百科了解了什么是Convex Hulls,然后查找了一下提示中的gift-wrapping算法,主要参考文章如下:Gift-Wrapping算法解决凸包问题

Problem 8: Personal art

喜欢自己调角度后得到的彩色玫瑰。
喜欢我这个彩色玫瑰

Submitting

前面git与实验的库链接好后,在代码项目文件夹界面右键选择Git Bash Here
然后,按顺序输入以下指令:
git status:查看哪些文件未被追踪。
git add . :将所有文件加入暂存区。
git commit :将暂存区文件上传到本地库。这里会打开你之前选择的文本编辑器让你在第一行输入此次提交的备注,啥都可以,比如P2 finish什么的。
git push -u origin master:将本地库文件上传到GitHub。
就可以成功提交了

Social Network

这个实验主要是对图的应用,然后了解Junit测试,尝试编写测试文件。
推荐使用Java中的HashMap类型,真的超级方便。
在建立person类的时候建议把每个person的friends也存进去,利于后面编写查找最短路径

设计/实现FriendshipGraph类

首先,建立一个HashMap类型的对象graph。Key的类型为String,用来存储名字,value的类型为 List,存储每个对象的朋友。
然后,主要包括一下三种方法:

public void addVertex(Person name)实现

首先需要判断加入的person是否已经在graph中,利用现有的方法containsKey()进行判断,若已存在则报错,若不存在则直接put加入graph中。

public void addEdge(Person a,Person b)实现

首先需要判断传入的Person是否在图里,若不在则报错直接退出,若在则在前者的朋友中加入后者。

public int getDistance(Person a, Person b)实现

首先判断是否存在person a和person b,若不存在直接返回-1。

再判断person a和person b是否为同一人,如果是则返回0,如果不是继续向下。

后续的最短路径求解了利用BFS的思想,我个人觉得关键是如何记住当前路径长度和如何判断找不到另一个对象然后返回-1退出程序。我花了好久时间,可能有点麻烦了,建立了一个List temp来保存要查找朋友的对象,还设置了两个HashMap类型的level和visit用来记录每个person的层数(即当前路径长度)和是否被访问。

设计/实现Person类

Person类主要存储对象的名字和朋友,包含四个方法:
public Person(String name):初始化对象
public String getname():获得名字。
public List getfriend():获得朋友。
public void addfriend(Person name):添加朋友。

Junit测试

建议百度,然后自行编写对要求的三个方法的测试程序,主要使用了assertEquals()方法。

最后总结

万事开头难,人的潜力是无限的。是我勉强做完这次实验的最大感觉,Java只看教程是学不会的还是得直接上手,但是Java中现成的方法很有用,想到一个问题可以试试直接去找有没有方法解决,合理安排好实验时间也很重要。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值