欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造Lab1

程序员文章站 2024-02-09 17:53:34
...

2020年春季学期
计算机学院《软件构造》课程

Lab 1实验报告

姓名 聂兆彦
学号 1180300429
班号 11803004
电子邮件 [email protected]
手机号码 15504871876

目录

1 实验目标概述 1
2 实验环境配置 1
3 实验过程 1
3.1 Magic Squares 1
3.1.1 isLegalMagicSquare() 1
3.1.2 generateMagicSquare() 1
3.2 Turtle Graphics 1
3.2.1 Problem 1: Clone and import 2
3.2.2 Problem 3: Turtle graphics and drawSquare 2
3.2.3 Problem 5: Drawing polygons 2
3.2.4 Problem 6: Calculating Bearings 2
3.2.5 Problem 7: Convex Hulls 2
3.2.6 Problem 8: Personal art 2
3.2.7 Submitting 2
3.3 Social Network 2
3.3.1 设计/实现FriendshipGraph类 2
3.3.2 设计/实现Person类 2
3.3.3 设计/实现客户端代码main() 2
3.3.4 设计/实现测试用例 3
4 实验进度记录 3
5 实验过程中遇到的困难与解决途径 3
6 实验过程中收获的经验、教训、感想 3
6.1 实验过程中收获的经验和教训 3
6.2 针对以下方面的感受 3

1实验目标概述
本次实验通过求解四个问题,训练基本 Java 编程技能,能够利用 Java OO 开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
⚫ 基本的 Java OO 编程
⚫ 基于 Eclipse IDE 进行 Java 编程
⚫ 基于 JUnit 的测试
⚫ 基于 Git 的代码配置管理
2实验环境配置
Eclipse IDE JUnit测试环境 jdk8编译环境 git 仓库
GitHub Lab1仓库的URL地址:Lab1-1180300429
3实验过程
3.1Magic Squares
读取文件,判断文件输入合法性为主要难点。对于一个矩阵是否为幻方的判断本身没有难度。
3.1.1isLegalMagicSquare()
1.读入文档,首先创造一个字符串数组,建立一个字节流,然后按字节读入文档,并将文档中的所有数字以字符串的形式记录在字符串数组当中。
2.以一个回车之前的制表位个数记录数字length,即得到该输入矩阵的阶,若该矩阵非n行,或是有数字以外的字符,又或两个字符串之间没有相隔n-1个空格,将会返回错误。
3.将字符串数组变成一个lengthlength大小的int型矩阵,将行列以及斜对角加起来看是否相同(创建一个2length+2大小的数组来记录和值),如果相同返回正确,否则返回错误。

3.1.2generateMagicSquare()
首先需要可以将矩阵写入文件,
其次还要能捕捉越界和边界无意义两个异常。
输入9时,生成的矩阵如下:
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
发现生成规律:
就是在n*n数组的第一行正中开始生成数,向右上方生成,遇到边界就跳跃到对立的边界,当生成完n个数时,向正下方生成,不断循环。
当输入偶数时,将会发生错误:ArrayIndexOutOfBoundsException,该错误是由于:
if (row == 0)
{
row = n - 1;
}
在调整完跳跃行后仍会触发row++,偶数这里如果已经在最后一行,仍会再加一行导致magic[row][col]中的row=n;导致越界。

当输入负数时,将会发生错误:ArrayIndexOutOfBoundsException,因为int magic[][] = new int[n][n];这个数组再定义时就要求n为整数,输入负数会导致边界定义无效。

3.2Turtle Graphics
该实验目的在于促进对git相关功能的了解和使用学习,使通过实验熟悉从github下载到本地库和从本地库上传到github。此外,其提供了在外部框架下进行开发的学习实例。turtle提供了便捷简单的几何图形绘制手段,使使用者在简单操作下实现复杂几何图形绘制。
3.2.1Problem 1: Clone and import
从GitHub获取该任务的代码:
通过提供的网址,选择download ZIP将文件下载到本地,或通过git克隆下载所提供代码。
本地创建git仓库、使用git管理本地开发:
1.git init初始化本地仓库
2.git add remote origin 添加远程库源
3.在远程仓库创建master分支
4.git pull origin master将远程仓库同步到本地
5. git add +文件名
git commit将本地文件加入本地仓库
git push将本地仓库同步到远程仓库。
3.2.2Problem 3: Turtle graphics and drawSquare

3.2.3Problem 5: Drawing polygons

3.2.4Problem 6: Calculating Bearings

3.2.5Problem 7: Convex Hulls

3.2.6Problem 8: Personal art

3.2.7Submitting
在eclipse工作文件夹下打开Git Bash Here,输入以下命令行
(1) git add Lab1-1180300429
(2) git commit -m “备注” 将本地文件加入本地仓库
(3) git push将本地仓库同步到远程仓库
3.3Social Network
以有向图概念,实现点、边等简单几何概念模拟人际关系
3.3.1设计/实现FriendshipGraph类

3.3.2设计/实现Person类

4实验过程中遇到的困难与解决途径
遇到的难点 解决途径
不熟悉eclipse使用

上网搜索相关mooc了解

Git无法下载安装

寻找替代品,后向老师寻求帮助并成功安装Git

不熟悉文件操作

查阅资料、向同学请教

不熟悉Github使用,不会从其站点下载文件和代码
向同学请教,或最直接从其他已下载同学处拷贝
无法有效上传本地代码到Github

向同学及老师求助,同学远程协助解决

程序运行结果有误且难以差错

通过debug来进一步对代码进行跟踪,便于分析错误

5实验过程中收获的经验、教训、感想
5.1实验过程中收获的经验和教训
5.2针对以下方面的感受
1.Java编程语言是否对你的口味?
java较之前学过的c在很多方面都更加便捷,很多行为更加灵活
2.关于Eclipse IDE
功能十分强大,动态检错能使我们再第一时间避免错误的发生,易于操作且易于使用学习
3.关于Git和GitHub
感觉会很有用,然而现在来说由于不熟悉还只能填麻烦。
4.关于CMU和MIT的作业
不仅严谨,而且具有十足的趣味性,且问题通常通常可延续升华,给了做作业者很大的发挥及提升空间。
5.关于本实验的工作量、难度、deadline
工作量略大,对于未学习过java的人来说极不友好,在对很多操作及语法不知情的情况下步履维艰。
6.关于初接触“软件构造”课程
讲真,课上可以讲讲java(穿插一些就好)。