实验过程
1 Magic Squares
检验矩阵是否是幻方矩阵。首先要检验文本中输入数据是否满足规范(包括是否构成方阵、是否按要求将数据以制表符隔开、是否包含小数和负数、是否有非法字符等),在满足规范的前提下,检验该方阵是否每行、每列和每条对角线上的元素相加都相等,最后,根据给出的参数生成一个新的矩阵存入第六个文本中并检验它。1.1 isLegalMagicSquare()
1、 先从文件中读取数据。在这里我先建立了一个输入流对象,再把输入的文件内容转换成计算机能读懂地语言,最后按行读取数据。为了防止异常,我用了try cash捕捉异常
2、 识别不合法输入。数据是否满足以制表符隔开、行列数是否相等、是否存在负号和小数点、是否存在其他非法符号
3、判断行、列、对角线相加是否相等。将数据通过函数Integer.valueOf将字符串转化为int型并存入int型数组,再通过多个for循环语句遍历数组,检验并得出结论。
开始时,对于返回false的原因没有仔细考虑,经过多次修正完善,最后得出较为完善的返回错误原因(包括数据是否满足以制表符隔开、行列数是否相等、是否存在负号和小数点、是否存在其他非法符号和是正整数方阵但不满足幻方矩阵定义)。运行结果如下:

1.2 generateMagicSquare()
这是生成magic square函数。流程图如下:

2 Turtle Graphics
按照实验指导书要求,补全turtle soup中的各个函数功能。包括用turtle画图,多边形角度计算,凸包问题等。
测试结果如下:

2.1 Problem 1: Clone and import
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
2.2 Problem 3: Turtle graphics and drawSquare
画正方形只需要调用forward,转动90°四次,即可。具体代码如下:turtle.draw();
turtle.forward(sideLength);
turtle.turn(90.00);
turtle.forward(sideLength);
turtle.turn(90.00);
turtle.forward(sideLength);
turtle.turn(90.00);
turtle.forward(sideLength);
运行结果如下:

2.3 Problem 5: Drawing polygons
画多边形需要计算方位角,公式为180-(360/边数),注意这里计算时要注意浮点数问题,代码为:public static double calculateRegularPolygonAngle(int sides) {
double polygonAngle = 180 - (360.0 / sides);
return polygonAngle;
测试结果如下:

2.4 Problem 6: Calculating Bearings
要求:实现函数calculateBearingToPoint和calculateBearings,分别用于计算从一点到一点需要转动的角度(给出初始指向角度)和给出点集的情况下,返回一个转动的角度集。
(2).具体实现:通过数学函数atan2计算两点之间方位角,在根据方位角取值为-180°~180°根据具体问题分析得到如何由方位角转化到由一点(已知初始朝向偏离正y轴的角度)到目标点应该转过的角度。
3.2.5 Problem 7: Convex Hulls
(1).算法思想:外包装法。从距离原点坐标最近的点开始,想象用胶带紧绷着缠绕一圈,直到回到初始点,所经过的最少的点即为所求凸包。具体代码实现:用函数atan2实现对方位角的计算,每次转过相同角度时,选择最长距离,忽略路径上的中间点。
(2).具体测试代码和测试结果:

2.6 Problem 8: Personal art
要求画出自己的艺术图形。运行结果如下:

2.7 Submitting
通过git的add、remote、push等指令将代码提交到自己绑定好的Github仓库上。

3 Social Network
通过Person类、FriendshipGraph两个类的实现完成关系图的建立,要求两个人之间的距离是最短关系路径距离。
3.1 设计/实现FriendshipGraph类
这里我用了java里的函数映射,map变量具有完备性,很方便。但是缺点是里面的元素无序,需要用迭代器。
1.数据结构定义
Map<Person, ArrayList> Friendship = new HashMap<>();
2.函数接口:
public void addEdge(Person name1, Person name2)
public void addVertex(Person name)
public Integer getDistance(Person name1, Person name2)
3.具体实现:通过上诉数据结构和接口,利用栈、深搜,不断更新最短路径,将结果储存在Map<Person, ArrayList> Friendship = new HashMap<>()中中。

3.2 设计/实现Person类
由于我用的是map,这里的数据结构就会非常简单。

3.3 设计/实现客户端代码main()
Main函数只需要在点集、边集里加入人名和他们之间的关系即可。
public static void main(String args[]) {
FriendshipGraph graph = new FriendshipGraph();
Person rachel = new Person(“Rachel”);
Person ross = new Person(“Ross”);
Person ben = new Person(“Ben”);
Person kramer = new Person(“Kramer”);
graph.addVertex(rachel);
graph.addVertex(ross);
graph.addVertex(ben);
graph.addVertex(kramer);
graph.addEdge(rachel, ross);
graph.addEdge(ross, rachel);
graph.addEdge(ross, ben);
graph.addEdge(ben, ross);
System.out.println(rachel.name + " to " + ross.name + “:” + graph.getDistance(rachel, ross));
System.out.println(rachel.name + " to " + ben.name + “:” + graph.getDistance(rachel, ben));
System.out.println(rachel.name + " to " + rachel.name + “:” + graph.getDistance(rachel, rachel));
System.out.println(rachel.name + " to " + kramer.name + “:” + graph.getDistance(rachel, kramer));

}
1
4 设计/实现测试用例
需要注意的是,为了保证结果的准确性,添加测试例子时尽量使图中存在一个人到另一个人有两条路径,其中有一条比另一条短,看看最后函数的返回值。

4 Tweet Tweet
请自行组织子目录结构。
1.函数接口和对应功能:
public static Timespan getTimespan(List tweets)
传递参数为tweet表,返回一个时间戳,其起始时间是该tweet表中第一条被发出的tweet的发布时间,其结束时间是该tweet表中最后一条被发出的tweet的发布时间。
public static Set getMentionedUsers (List tweets)
传递参数为tweet表,返回这个tweet表中所有被@的用户名集合。鉴定是否是合法用户名的原则是符合规定的正则表达式(|[A-Za-z0-9_-]+)@([A-Za-z0-9_-]+)

4.2:Filtering lists of tweets
1.函数接口和对应功能:
public static List writtenBy(List tweets, String username)
传递参数为tweet表和要一个用户名,遍历整个tweet表中的tweet,将作者为传入参数的用户名所作的tweet存放在一个线性表中并返回。
public static List inTimespan(List tweets, Timespan timespan)传递参数为tweet表和一个时间戳,遍历整个tweet表,将在时间戳内发布的tweet存放在一个线性表内并返回。
public static List containing(List tweets, List words)
传递参数为tweet表和一组words,遍历整个tweet表,将含有words关键字text的tweet存放在一个线性表中并返回。

4.3&4.4:Inferring a social network and Get smarter
1.函数接口和对应功能:
public static Map<String, Set> guessFollowsGraph(List tweets)
(1).未改进的版本:建立一个map,记录tweet表中提及的用户(包括发过tweet的或被@的用户)为关键字,value设置为他们对应的关注者集合(a@b,则表示b的关注者中有a)。
(2).改进的版本:加入三元闭合,即若a@b,b@c,则认为a@c,即c的关注者中有a。
public static List influencers(Map<String, Set> followsGraph)
(1).传递参数为一个建立好的、有tweet中完整关注者信息的map变量,通过冒泡排序按关注者数量(影响力)由高到低排序用户名,存入一个线性表并返回。

实验过程中收获的经验、教训、感想
实验过程中收获的经验和教训
写实验之前要多熟悉语言,对Java语言不熟悉的我在这次实验中遇到了很多困难,有很多Java自带的函数和数据结构都不了解,导致走了很多弯路。这个时候千万不能放弃,应该努力通过各种途径去学习相关知识,来弥补自己的不足。

Lab1实验过程及心得体会相关推荐

  1. 实验1的运行过程及心得体会

    实验1的运行过程及心得体会 本次实验是从学习c++开始的第一次实验,实验内容比较简单也比较基础,通过对书本自学以及自己的摸索基本可以完成此次实验.这次实验主要的目的是让我们熟悉c++的编程环境,体验c ...

  2. python语言的实验心得体会范文_实验报告个人心得体会范文

    实验报告个人心得体会范文 实验后的实验报告让我们有了总结回顾的效果.下面是 xx 整理的实验报告心得体会范文,以供大家阅读. 实验报告心得体会范文 ( 一 ) 这学期我们开设了计 算机网络技术实验课. ...

  3. php实例一实验报告心得,实验报告个人心得体会【两篇】

    [导语]所谓心得就是工作或学习中的体验和领悟到的东西,亦可以称作心得体会."心得体会"是一种日常应用文体,属于议论文的范畴.一般篇幅可长可短,结构比较简单.下面是由无忧考网为大家整 ...

  4. python编程实验报告收获与体会_实验报告个人心得体会(20篇)

    实验报告个人心得体会 第 1 篇: 在做 XXX 的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下 子就将实验报告做完.直到做完测试实验时,我才明白其实并不容易做,但学到的知识与难 ...

  5. java五子棋实验总结与心得_实验总结与心得体会

    实验总结与心得体会 实验总结与心得体会 之前我在编程的过程中写过一份实验总结,里面详细的记录了实验中遇到的各种问题以及解决办法,当我完成了整个实验整理文档的时候,看到程序说明文档的后面标着0kB,心里 ...

  6. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  7. Lab1过程及心得体会

    实验过程 1 Magic Squares 检验矩阵是否是幻方矩阵.首先要检验文本中输入数据是否满足规范(包括是否构成方阵.是否按要求将数据以制表符隔开.是否包含小数和负数.是否有非法字符等),在满足规 ...

  8. 【软件构造】实验一的心得体会

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言` 一.Magic Squares 1.任务要求 2.isLegalMagicSquare() 1.BufferedRe ...

  9. 计算机实验adda转换心得体会,dsp实验ADDA

    ad7887 实验目的 1. 熟悉使用外部AD转换的基本原理. 2.掌握AD7887的技术指标和常用方法 2. 掌握并熟练使用DSP和AD7887的接口及其操作 实验五 A/D(外部)实验 -.实验目 ...

最新文章

  1. 电脑文档提示无法连接服务器,提示无法将数据库连接到SQL服务器-工业支持中心-西门子中国...
  2. 操作系统开发第一人去世,曾获图灵奖启发Linux和C语言
  3. 中法计算机专业,计算机专业中法对照词汇
  4. java filter函数的用法_5分钟掌握Python | Map、Reduce和Filter如何运用?
  5. (*长期更新)软考网络工程师学习笔记——Linux操作系统中的vi/vim 编辑器详解
  6. angular的html引入js,在AngularJS中的文件夹中加载JavaScript和CSS文件
  7. 网页实现凭证金额分割线_一位整理过5000个网页书签的大神分享:实用的书签管理方案...
  8. 深入理解和应用display属性(一)
  9. 文件类的操作 File c# 1614823687
  10. 洛谷——P1161 开灯
  11. android xml 加密,AndroidManifest.xml和MAIN.xml文件都是加密的,请问怎么解决
  12. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]
  13. 2022最新:8种常用DNA甲基化测序技术,你知道几个?|易基因
  14. Ubuntu系统安装webrtc
  15. 全文搜索引擎Elasticsearch的初体验:基本概念和操作
  16. 在通用计算机系统中系统软件,计算机系统中系统软件的核心是什么
  17. vue实现列表的无缝滚动
  18. 一个艰难的决定。。。搬家了~
  19. linux打开网络摄像头失败,Opencv没有检测到linux上的firewire网络摄像头
  20. odis工程师许可证_让您的工程师选择许可证:指南

热门文章

  1. 办公室为人处事说话技巧大全每天学点办公室说话技巧
  2. vulnhub Loly: 1
  3. ORA-600 Lookup Error Categories
  4. HTML(进阶核心标签)
  5. 【修真院web小课堂】请描述 BFC(Block Formatting Context) 及其如何工作
  6. proteus电路仿真软件使用方法
  7. Serializer序列化器使用
  8. 个人即时到帐支付接口-个人收款即时到账免签约
  9. Apache Dubbo基本使用
  10. pycharm中关于python虚拟环境的配置