关于hit软件构造lab1的一些实验后的回顾

1 Magic Squares

该任务就是:
判断一个n阶矩阵是否是一个幻方,理解由奇数n生成一个n阶幻方的程序。

isLegalMagicSquare()的实现思路:

  1. 读入文件
  2. 分割数字,输入到数组中
  3. 建立循环函数,三次循环判断行,列,对角线是否满足幻方定义

isLegalMagicSquare()实现过程需要的学习任务:

  1. 学习java中关于如何读入txt文件
  2. 学习java中如何利用正则表达式分隔字符串
  3. 学习如何处理异常流并输出到控制台
  4. 学习隐藏异常信息防止干扰用户体验
  5. 将不满足条件的矩阵剔除,输出false
  6. 编写程序对满足幻方条件的矩阵的检验算法

generateMagicSquare():即罗伯法构造幻方

2 Turtle Graphics

任务理解:
徽标是麻省理工学院创建的一种编程语言,最初是用来在空间中移动机器人的。 添加到徽标语言中的Turtle图形,使程序员可以向移动的屏幕“ turtle”发出一系列命令,并随即画一条线。 Turtle图形也已添加到许多不同的编程语言中,包括Python,它是标准库的一部分。
综述,从github下载代码,根据函数作用的注释补充函数内容,并在turtle中完成目标操作

首先导入代码
在导入代码文件后,eclipseIDE出现很多错误提示,通过网上寻找资料发现问题出现在import上,只需将 import XXX加上前缀import P2.XXX即可解决

代码自带函数解读:
DrawableTurtle 初始化起点、方向、颜色、动作

forward(int steps) 将以当前方向和位置长画为steps的直线的动作加入actionList

turn(double degrees) 将当前方向顺时针旋转degrees(弧度制)的动作加入actionList

color(PenColor color) 将笔的颜色设置为color中颜色的动作加入actionList

draw() 在画布中画出actionList所有动作

画正方形:

turtle.forward是画边,turtle.turn是进行一次转角,于是我们就可以进行一次循环,完成4次便得到正方形

画正多边形
完成函数,并调用sides次forward和turn即可画出多边形

calculateBearingToPoint函数:以当前点为原点建立坐标系,则目标点可能在四个象限,先用atan函数求出角度,对这个角度在四个象限分别作处理,第一象限为90-a;第二象限90+a;第三象限270-a;第四象限270+a;再减去原来的角,判断正负,如果为负,+360。

calculateBearings函数:初始方向为0°,每次迭代用前一个点和当前点和当前方向,调用calculateBearingToPoint函数求出角度,加入结果的容器,调整当前方向,下一个点作为当前点,如此循环。

凸包的构造步骤为:

  1. 选取第一个点作为起始点
  2. 计算该点和其他所有点的转角
  3. 选出转角最小的点,如果有相同的,则选择距离当前点最远的
  4. 这个点为凸包的下一个点
  5. 重复以上步骤,直到某一个点的下一个点为第一个点

自画图
随便调用先前完成的函数在使用一下颜色函数

3 Social Network

任务理解:
编写两个类,一个person,一个friendshipGraph类,实现社交网络的模拟,实现添加点,添加边,计算距离等操作。对有向图进行各项操作,加入点,加入边,计算点之间的单个功能。

设计/实现FriendshipGraph类:
addVertex(Person newPerson)函数用来加入新的“人”到people列表,在此之前要在namelist中检查是否有重复的名字,有则输出提示

addEdge(Person p1, Person p2)函数在每个人的朋友列表中增加新的朋友

getDistance(Person Person1, Person Person2)函数,声明一个Map<Person, Integer> distantMap数据结构,来保存起点到当前点的键值对(名字,距离),使用邻接表广度搜索的方法,借助队列,先将起点入队,然后执行循环,直到队列为空前:弹出队列头元素,计算当前距离,把弹出点的所有“朋友”入队,并加入map中,设置距离为先前计算的距离+1。直到找到结束的节点。返回这个点在map中键值对的“值”。

设计/实现Person类:
包含保存名字的字符串
保存朋友的字符串
和他们相应的get方法getName()和getFriendList()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值