HIT2020春季学期软件构造Lab1

1 实验目标概述

本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
 基本的 Java OO 编程
 基于 Eclipse IDE 进行 Java 编程
 基于 JUnit 的测试

2 实验环境配置

(1) 请阅读 http://web.mit.edu/6.031/www/fa18/getting-started/,按该页面列出
的指南,在本地机器安装相应的开发环境(JDK、Eclipse、Git)并熟练
掌握它们的配置过程。
(2) 可以从 http://web.mit.edu/6.031/www/sp17/getting-started/eclipse-faq/获取
更多的 Eclipse 帮助。
(3) 阅读 http://web.mit.edu/6.031/www/fa18/classes/02-basic-java/了解 Java 的
基本编程特性。
(4) 关于 Git 的学习手册:https://git-scm.com/book/en/v2(英文版)、https://git
scm.com/book/zh/v2(中文版)。可使用https://www.shiyanlou.com/courses/4
提供的在线实验环境进行 Git 练习。
(5) 阅读 http://web.mit.edu/6.005/www/fa16/psets/ps0/#unit_testing,了解单元
测试和 JUnit 工具。
(6) 阅读https://github.com/junit-team/junit4/wiki/Download-and-Install,并在自
己的 Eclipse IDE 中安装配置 JUnit。
(7) 阅读 https://github.com/junit-team/junit4/wiki/Getting-started,了解如何使
用 JUnit 为 Java 程序编写测试代码并执行测试。
实验环境设置请参见 Lab-0 实验指南。
本次实验在 GitHub Classroom 中的 URL 地址为:
https://classroom.github.com/a/qL3Yd1XX
请访问该 URL,按照提示建立自己的 Lab1 仓库并关联至自己的学号。
本地开发时,本次实验只需建立一个项目,统一向 GitHub 仓库提交。实验包
含的 4 个任务分别在不同的目录内开发,具体目录组织方式参见各任务最后一部 分的说明。请务必遵循目录结构,以便于教师/TA 进行测试

3 实验过程

请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。

3.1 Magic Squares

1.函数规约:boolean isLegalMagicSquare(String fileName)
2.在main()函数中调用五次 isLegalMagicSquare()函数,将 5 个文本文件名分别作为参数输入进去,看其是否得到正确的输出(true, false)。需要能够处理输入文件的各种特殊情况,例如:文件中的数据不符合
3.Magic Square 的定义(行列数不相等、并非矩阵等)、矩阵中的某些数字并非正整数、数字之间并非使用\t 分割、等。若遇到这些情况,终止程序执行(isLegalMagicSquare 函数返回 false),并在控制台输出错
4.阅读以下代码,将其加入你的 MagicSquare 类中作为一个静态函数,并试着
在 main()中测试它。为该函数绘制程序流程图,并解释它如何根据输入的参数(奇数 n)生成一个 n×n 的 Magic Square。据此为上述代码添加中文注释。

3.1.1 isLegalMagicSquare()

在这里插入图片描述
第一步,读取txt文件生成二维数组squares,并且在读取的过程中对文件中的数据是否满足要求进行判断;
在这里插入图片描述
第二步,通过将得到的数组进行行列元素相加与对角线元素相加,判断是否为幻方。

3.1.2 generateMagicSquare()

在这里插入图片描述
在这里插入图片描述
第一步,判断当输入的 n是否不合法,当n 为偶数、n 为负数等,不要该函数抛出异常并非法退出,而是提示错误并“优雅的”退出——函数输出 false 结束。
在这里插入图片描述
第二步,利用你前面已经写好的 isLegalMagicSquare()函数,在 main()函数判断该函数新生成的文本文件 6.txt 是否符合 magic square 的定义。
并且流程图如下:
在这里插入图片描述

3.2 Turtle Graphics

第一个任务是使用前面介绍的两种方法实现drawSquare(Turtle Turtle,int sideLength)。实现方法后,在TurtleSoup.java中运行main方法。要运行main,一个窗口将弹出,一旦你点击“运行!”,在画布上画了一个正方形。
第二个任务是实现calculateBearingToPoint。实现calculateBearings,并且确保在这里使用calculateBearingToPoint。
第三个任务是实现converxhull,用它计算凸壳,包含一组输入点中所有点的最小凸集。
第四个任务是实现drawPersonalArt。在这个功能中,可以自由地绘制任何想要的艺术作品。你的作品将受到美学和用来绘制它的代码的双重评判。你的艺术不需要复杂,但应该不止几行。使用helper方法、循环等,而不是简单地列出forward和turn命令。仅对绘图个人艺术,也可以使用turtle的颜色方法来改变笔的颜色。

3.2.1 Problem 1: Clone and import

3.2.2 Problem 3: Turtle graphics and drawSquare

每次转90°就能生成正方形
在这里插入图片描述

3.2.3 Problem 5: Drawing polygons

利用公式:(sides - 2) * (180.0 / sides)计算规则多边形的内角
在这里插入图片描述

利用公式:360.0 / (180.0 - angle)根据内角度数计算正多边形的边数
在这里插入图片描述

利用方法calculateRegularPolygonAngle,根据边数绘制正多边形
在这里插入图片描述

下面是正六边形的例子:
在这里插入图片描述

3.2.4 Problem 6: Calculating Bearings

通过两点横纵坐标计算角度:
在这里插入图片描述
在这里插入图片描述

3.2.5 Problem 7: Convex Hulls

在这里插入图片描述
若点数小于3,直接返回;
否则得到最左下的点作为开始点;
寻找下一个点pointNext,要求是与目前点pointCurrent夹角最小,在夹角最小的情况下,需要满足与目前点pointCurrent距离最远

3.2.6 Problem 8: Personal art

在这里插入图片描述
得到的图如下:
在这里插入图片描述

3.2.7 Submitting

git config 添加配置项目
输入:git config --global user.name “1180300725”
git config --global user.email 17606786606@163.com
在这里插入图片描述
输入:git init
在这里插入图片描述

再输入:git add .
在这里插入图片描述

再输入:git commit -m “first commit”
在这里插入图片描述
再输入:
git remote add origin https://github.com/1180300725/1180300725.git
git push -u origin master
在这里插入图片描述
最后再回到Github刷新界面,就上传成功了
在这里插入图片描述

3.3 Social Network

该任务要求设计一张社交网络图,基于连接人与人,并且能计算任意两人之间的联系情况。网络图基于两个类,分别是FriendshipGraph类和Person类。

3.3.1 设计/实现FriendshipGraph类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3.2 设计/实现Person类

在这里插入图片描述

3.3.3 设计/实现客户端代码main()

在这里插入图片描述

3.3.4 设计/实现测试用例

考虑了重复名字的情况
在这里插入图片描述
考虑了a与b之间已经有朋友关系,或a与b是同一个人,或者a与b成功建立朋友关系的情况,若建立不成功则返回false
在这里插入图片描述
创建了一个简单的图,进行测试
在这里插入图片描述
建立了一个复杂的图,进行测试
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值