目录
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
根据实验手册简要撰写。
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
1.基本的 Java OO 编程
2. 基于 Eclipse IDE 进行 Java 编程
3. 基于 JUnit 的测试
4. 基于 Git 的代码配置管理
简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
在本次实验中,我首先尝试在电脑中已经下载好的eclipse中进行编程,但发现eclipse软件的环境高配置并不正确,在上网查阅大量资料、并和同学交流后发现,由于下载时间过长,且当初是以Java EE为目标进行的下载,目前在电脑中的eclipse软件已经不能正常使用,而重新下载或删除都可能会遇到目前的遗留问题。因此在和同学讨论之后,我打算下载idea作为我的java编程IDE。之后根据实验手册的说明指导下载了Git,并因为找不到到底应该在idea中输入Git相关的哪个路径卸载并重新下载了两遍。之后上网搜集资料,并成功配置JDK11,并初步温习、了解了java相关库的引入、引用等操作。
困难1:在eclipse中始终无法run程序,上网搜索不到具体资料,大部分内容与遇到的问题相关度很低。
解决方法:下载idea作为我的javaIDE
困难2:在idea中难以成功配置Git,多次删除、重新下载、切换版本后均无效果。
解决方法:在与正确完成Git配置的同学进行软件比对之后,穷举每一个可能正确的文件对应地址,最终成功配置JDK。
在这里给出你的GitHub Lab1仓库的URL地址。
https://github.com/ComputerScienceHIT/HIT-Lab1-120L021816
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
在这里简要概述你对该任务的理解。
该问题要求程序能够判断一个矩阵是否是magic square,即幻方,并要求这个程序具有十足的健壮性,能够对输入的字符种类(是否是数字,是否是制表符,制表符有几个)进行判断,对矩阵的行数和列数(行数和列数是否相等,是否有空元素)进行判断,以及程序本身的目的:对输入的矩阵是否是magic square进行判断。
这个任务要求我们有对输入值进行判断,对程序健壮性的深层次理解,相比之下编程难技术要求并不是那么明显。
按步骤给出你的设计和实现思路/过程/结果。
按步骤给出你的设计和实现思路/过程/结果。
在这里简要概述你对该任务的理解。
该任务是MIT计算机专业的作业之一,该任务以著名的简单绘图库Turtle为例,对我们引用外部库、处理外部函数和对自己撰写的函数进行测试的能力提出了一定的要求。虽然每一个编程任务都与Turtle库有关,但实际上完成任务的大部分时间都是在设计编程。
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
在相关网页教程的指导下,我很快找到了相关仓库,并在相关仓库页面点击Code,成功以压缩包形式下载了该任务代码,并复制到了正确的位置。在本地创建仓库过程中,我遇到了一些困难,包括之前遇到了一部分配置环境问题。为了解决这些问题,我下载了github桌面版,并在本地同步了需要提交作业的库。在完成这些之后,我可以很好地使用git管理本地开发。
如何通过Git提交当前版本到GitHub上你的Lab1仓库。
在这里简要概述你对该任务的理解。
这个问题是无向图的最短路径求解问题,是上学期数据结构作业的简化版本。但即使难度偏简单,在java的环境下,也不失为一个好的复习项目。而编写类方法并在其他文件中引用对大部分同学来说也是一次崭新的体验。
给出你的设计和实现思路/过程/结果。
在addVertex与addEdge部分,我主要仿照了P2中Point.java的写法,自己编写一个FriendshipGraph类,并写出了相关方法。这部分难度比较简单,更重要的是模仿和学习。
在getDistance部分,需要编写一个无向图的最短路径算法。实现这个程序的算法要比Dijkstra算法,与Floyd-Warshall算法都要简单。这是由于只需要求解给出顶点对之间的最短路径,也是因为FriendshipGraph类所包含的边没有加权,有边连接的两个点距离默认为1。因此只需要从起点开始进行先广搜索,用队列去查找有没有终点(由于题干中要求按照有向图的方式添加边,因此有必要区分起点和终点)。如此循环,直到找到终点,或是发现在某次循环之后存放已查找过顶点的集合元素数没有增加(即没有找到这个元素)。按照这样的逻辑进行编程,就可以完成目标。
给出你的设计和实现思路/过程/结果。
Person类明显要比FriendshipGraph类简单,只需要仿照Point.java进行编写即可。不过要注意的是按照题述里给的格式,Person类生成时还要有姓名这一项内容,即题述代码里用双引号括起的那一部分。此外,为了FriendshipGraph类的编写,我还在Person类下生成了一个列表。
给出你的设计和实现思路/过程/结果。
客户端代码,需要的是能让人看懂是什么样的,说明全部功能,并且最好美观一些,在硬难度方面反而不大。只要对照方法、一项一项核对功能,就可以做好。
给出你的设计和实现思路/过程/结果。
测试用例需要包括顶点连接的情况,顶点不连接的情况,起点与终点相同的情况,起点不存在或终点不存在的情况,测试时都要顾及到。
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 |
时间段 |
任务 |
实际完成情况 |
2022-04-24 |
23:30-0:05 |
第一次下载Git,Junit等插件,发现eclipse等存在的问题 |
按计划完成 |
2022-04-25 |
11:04-12:30 |
编写问题1的isMagicSquare函数并进行测试 |
按计划完成 |
2022-04-25 |
14:58-16:23 |
与同学讨论,将isMagicSquare函数中生成二维数组的部分由数组相关算法变为列表相关算法 |
在因为困赖了一会床之后,按计划完成 |
2022-04-25 |
16:24-19:15 |
进行Github Lab1库的相关操作(修改名称,下载Github Desktop,建立idea与Github的联系) |
按计划完成 |
2022-04-25 |
21:11-23:56 |
进行P2 |
由于和同学聊天讨论题目只完成了实验手册的阅读,基本上等于没做 |
2022-04-26 |
9:03-9:33 |
阅读P2延伸网页Problem1-4,并完成Problem 3 |
按计划完成 |
2022-04-26 |
9:45-10:32 |
进行P2的Problem5 |
Github Desktop上传突然出现问题,进行调试,未完成 |
2022-04-26 |
10:37-11:04 |
完成Problem5,并测试 |
按计划完成 |
2022-04-26 |
14:10-15:56 |
完成Problem6,并测试 |
按计划完成 |
2022-04-26 |
16:30-20:01 |
完成Problem7,并测试 |
延后1小时完成 |
2022-04-26 |
20:02-20:38 |
完成Problem8,并测试 |
按计划完成 |
2022-04-27 |
7:59-9:57 |
编写问题3的addVertex函数,addEdge函数,编写FriengshipGraph与Person的生成方法 |
按计划完成 |
2022-04-27 |
10:14-12:38 |
编写问题3的getDistance方法 |
延后1小时完成 |
2022-04-27 |
15:00-23:44 |
写报告 |
延后2小时完成 |
遇到的困难 |
解决途径 |
在eclipse中始终无法run程序,上网搜索不到具体资料,大部分内容与遇到的问题相关度很低。 |
下载idea作为我的javaIDE |
在idea中难以成功配置Git,多次删除、重新下载、切换版本后均无效果。 |
在idea中难以成功配置Git,多次删除、重新下载、切换版本后均无效果。 |
在问题1中,用数组方式生成矩阵时间复杂度太大 |
上网学习java List,改用列表生成矩阵 |
Github Desktop中,文件总是上传失败 |
多次尝试,或者用手机流量共享热点传输 |
在问题3中,用列表计算最短路径时间复杂度太大 |
改用队列Queue与LinkedList结合进行操作 |
由于我之前使用的主要是C语言,我并没有感受到太大的不好,但就是不能用指针了感觉有些可惜。另外,Java的赋值方式,和输入输出函数都有些繁琐,其他的都很好,列表和队列的应用也在编程过程中帮了我很大的忙。
由于我编程是用IDEA进行的,所以我只能说IDEA的优势与不足。
IDE的优势,自然是广大的插件体系与可选项提示目录,可以帮助我这种初学者很好地选择语句,是一个不错的参考。另外IDE的颜色切换也很不错。
至于IDE的劣势,可能就是它自身只是文本编辑器,需要很多插件才能运转。而配置环境,下载插件的过程通常是漫长而又痛苦的,难度也相当大。就让我在现在卸掉IDEA以及相关配件,重新下载一遍,我是很没有把握能够装好的。
确实,只要我想,我可以将很多版本直接上传到广大的云空间,并且可以挑选版本进行下载。
文字叙述详细,规则阐述清晰,学生知道什么能做什么不能做,什么该做什么不该做,每一步的引导详细具体,只要不是像我这样看不懂英文的,都可以很轻松的解决。
工作量无疑是大的,之前我的几个计算机系统实验和上学期的数字电路实验没一个花费这么长时间的。难度尚可,不算太难,对我的难度主要是在配置环境和搜索代码上。不过deadline和自动机考试重了,可以试着延后1-2天,否则可能会有做题不认真、死线冲锋等情况。
课程,听不懂。
进度,太快了。
问题,不知从何问起。
实验,只得当作预习。