目录

1 实验目标概述 1

2 实验环境配置 1

3 实验过程 1

3.1 Magic Squares 1

3.1.1 isLegalMagicSquare() 1

3.1.2 generateMagicSquare() 2

3.2 Turtle Graphics 4

3.2.1 Problem 1: Clone and import 4

3.2.2 Problem 3: Turtle graphics and drawSquare 5

3.2.3 Problem 5: Drawing polygons 5

3.2.4 Problem 6: Calculating Bearings 6

3.2.5 Problem 7: Convex Hulls 7

3.2.6 Problem 8: Personal art 9

3.2.7 Submitting 9

3.3 Social Network 10

3.3.1 设计/实现FriendshipGraph类 10

3.3.2 设计/实现Person类 12

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

3.3.4 设计/实现测试用例 14

4 实验进度记录 16

5 实验过程中遇到的困难与解决途径 16

6 实验过程中收获的经验、教训、感想 16

6.1 实验过程中收获的经验和教训 16

6.2 针对以下方面的感受 17

  1. 实验目标概述

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

基本的Java OO编程

基于Eclipse/IDEA IDE进行Java编程

基于JUnit的测试

基于Git的代码配置管理

2.实验环境配置

在官网上下载Eclipse、JDK和Git并安装。在为JDK配置环境变量的时候,在系统环境变量中新建一个叫“JAVA_HOME”的环境变量,变量值为JDK的安装路径。然后在Path的环境变量中添加一个“%JAVA_HOME%bin”的变量值。省去很多其它的步骤。

URL:https://github.com/ComputerScienceHIT/HIT-Lab1-hit1190200203

3.实验过程

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

为了条理清晰,可根据需要在各节增加三级标题。

3.1Magic Squares

Magic Squares即幻方,n阶幻方是一个正方形n×n个数(通常是不同的整数)的排列,使得所有行、所有列和两个对角线中的n个数总和为同一常数。

3.1.1isLegalMagicSquare()

本题要求在main()函数中调用五次isLegalMagicSquare()函数,将5个文本文件名分别作为参数输入进去,看其是否得到正确的输出(true,false)。

1、 先从文件中读取数据。按行读取数据。为了防止异常,用了try cash捕捉异常;

2、判断行、列、对角线相加是否相等。将数据通过函数Integer.valueOf将字符串转化为int型并存入int型数组,再通过多个for循环语句遍历数组,检验并得出结论。

运行结果如下:

3.1.2generateMagicSquare()

首先计算初始位置(0,n/2),赋值为1,之后每次取当前位置的右上角的位置,设置的值每次加1,如果当前行是第一行,则下一行为最后一行,如果当前列是最后一列,则下一次为第一列,如此重复平方次,就对整个矩阵赋完值了,且满足幻方定义。

思路:(1) 将产生的magic square写入文件\src\P1\txt\6.txt中;(2) 当输入的n不合法时(n为偶数、n为负数等),不要该函数抛出异常并非法退出,而是提示错误并“优雅的”退出——函数输出false结束。所以我们只需要在开始判断是否满足n的合法输入并且增加写入文件的操作。

过程:

3.2Turtle Graphics

在这里简要概述你对该任务的理解。根据代码注释提示补全代码从而实现一个绘制工具Turtle Graphics。
1、从Github上获取任务的源代码,在本地创建git仓库,使用git管理本地开发
2、画出正四边形。
3、完成正多边形内角和外角的计算
4、计算向量之间的夹角
5、计算凸包
6、绘制自己的图形

3.2.1Problem 1: Clone and import

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。

首先打开实验手册提供的网站,从上面下载P2的包,并解压导入eclipse中。

从本地创建git仓库:1、git init初始化本地仓库2、git add remote添加远程库源3、在远程仓库创建master分支4、git pull origin master将远程仓库同步到本地5、git add * ->git commit -m “”->git push将本地文件加入到本地仓库,将本地仓库同步到远程仓库。

3.2.2Problem 3: Turtle graphics and drawSquare

  1. 通过阅读指导书我们知道forward、turn函数的功能是实现给定参数的前进和转向
    2、我们通过四次循环,每次前进并且旋转90°就可以得到我们想要的正方形。

​​​​​​​

​​​​​​​3.2.3Problem 5: Drawing polygons

补全calculateRegularPolygonAngle。正多边形内角只需根据正多边形内角=(边数-2)/sides写出calculateRegularPolygonAngle (int sides)

补全calculatePolygonSidesFromAngle。根据公式得:

 补全drawRegularPolygon。该函数功能为画出指定边长的正多边形。调用calculateRegularPolygonAngle(sides)计算正多边形的内角,调用forward和turn函数进行前进和转向。函数为:

​​​​​​​3.2.4Problem 6: Calculating Bearings

补全calculateBearingToPoint,计算前进方向的偏转角只需要调用atan2函数得到弧度,然后调用toDegree转换成角度,特别注意若角度为负值,需要加上360°。函数为:

补全calculateBearings,计算一系列点的偏转角不断调用上面的函数即可:

​​​​​​​

​​​​​​​3.2.5Problem 7: Convex Hulls

补全Convex Hulls。该函数的功能是求出包围所有点的凸包。需要利用Gift wrapping algorithm算法,先找到最左下角的点加入集合,然后比较剩余点到此点的偏转角,找到偏转角最小的加入集合,当偏转角相同时,需要找到最长的一条边的点加入集合,最后即可得到凸包的点集。

函数为:

​​​​​​​3.2.6Problem 8: Personal art

​​​​​​​3.2.7Submitting

测试结果为:

如何通过Git提交当前版本到GitHub上你的Lab1仓库。

通过git add *->git commit -m “”->git push提交到Lab1仓库

​​​​​​​3.3Social Network

利用图结构构建一张人际关系网,首先是无向图,但类可以拓展到有向图。

​​​​​​​3.3.1设计/实现FriendshipGraph

首先,在FriendshipGraph中声明两个类

然后,addVertex函数用来添加一个成员,先检查名字是否有重复。有则输出。

 之后,addEdge函数是用来给x添加一个新朋友y,调用Person类中的addnewfriend方法

 最后,getDistance函数是用来计算两个Person之间的距离,使用Queue和Map实现BFS求最短路。

​​​​​​​3.3.2设计/实现Person

思路:在Person类中我们要完成的功能为:增加本人的新朋友addnewfriend,得到本人的名字myname,得到本人的朋友列表getfriend。

首先,定义三个变量:

 然后构造函数即可:

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

直接复制实验报告的代码即可:

实验输出结果为:

注释掉老师给的代码第10行后,人工判断会改变rachel与其他人之间的距离,也就是会变成-1,因为rachel和ross不在是朋友所以变成-1,也会导致rachel和ben不是朋友也会变成-1。

程序执行后的结果和想象中的相同,如图所示:

​​​​​​​

​​​​​​​3.3.4设计/实现测试用例

思路:分别要对在addVertex ,addEdge ,getDistance三个功能进行测试。

建立四个对象进行测试即可。

1.进行testaddVertex测试:

2.进行testaddEdge测试:

 3.进行testaddEdge测试:

 结果为:

​​​​​​​4.实验进度记录

请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。

日期

时间段

任务

实际完成情况

2021-05-11

18:30-20:10

浏览全部的实验内容,编写问题1的isLegalMagicSquare函数并进行测试

延期半小时完成

2021-05-18

18:30-20:10

完成问题2的前5个问题

遇到困难,未完成

2021-05-21

18:00-21:00

完成实验一剩余的部分

准时完成

5.实验过程中遇到的困难与解决途径

遇到的困难

解决途径

开始时,对java的文件操作不会

通过网上学习和询问同学相关问题得到了解决

git一开始连接不上,不知道怎么连接

通过舍友的帮助,教会了我如何在命令行中一步一步的完成git的连接

P2中关于凸包的Gift wrapping algorithm算法不会

通过网上的学习渐渐的明白了,具体运用过程也克服了一些困难

P3中的测试部分一开始无从下手

自己想了想老师上课所教的测试的含义,明白了要对P3中三个函数进行具体的测试

6.实验过程中收获的经验教训、感想

6.1​​​​​​​实验过程中收获的经验教训

1.由于首次学习和使用java,对java的众多语法不熟悉,处处碰壁;
2.学到了很多新知识,比如git的使用,junit的编写;
3.对java面向对象编程的特质有了较深的理解。

​​​​​​​6.2针对以下方面的感受

(1)Java编程语言是否对你的口味?

还可以,函数接口比较好用,但是一开始基础不行,做实验的过程有点痛苦。

(2)关于Eclipse IDE;

对初学者来说还算可以,但是本人觉得还是IDEA更加方便。

(3)关于Git和GitHub;

一开始没有太多的接触,在连接的过程中遇到了很多麻烦,另外登录github时时常进不去花费了一些时间。

(4)关于CMU和MIT的作业;

自我感觉作业难度较大,英文较多,阅读起来比较麻烦。

(5)关于本实验的工作量、难度、deadline;

实验内容较多,工作量算是比较大的,另外难度也不定,刚开始接触时头都大了,此外deadline与CSAPP课程的实验冲突较大,感觉有些手忙脚乱。

(6)关于初接触“软件构造”课程;

一开始不知道老师在讲些什么,讲的东西有什么用,但是后来讲到类型的时候感觉还是可以的。

​​​​​​​

Java实践(实验一)相关推荐

  1. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  2. java泛型实验报告,java实验报告异常集合类和泛型

    java实验报告异常集合类和泛型 成绩: 面向对象原理与 Java 实践课程实验报告实验 3:异常.集合类和泛型姓 名 _ ___ 班 级 _ ___ 学 号 _ ___ 实验地点 _ ___ 实验时 ...

  3. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  4. 20175212童皓桢 实验三敏捷开发与XP实践实验报告

    20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...

  5. 《Python程序设计》实验四 Python综合实践实验报告

    <Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...

  6. java合肥工业大学考试题库_合肥工业大学java程序设计实验二

    合肥工业大学java程序设计实验二 1 / 3<Java 程序设计>实验报告--实验 2实验室:三.四机房 2014 年 05 月 22日学院 计算机与信息学院 专业班级 姓名 成绩课程名 ...

  7. Java程序设计 实验三

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:李海空  学号:20135329 成绩:             指 ...

  8. java上机六,Java上机实验6.doc

    Java上机实验6 实验六 实验时间: 实验班级: 指导老师: 实验名称:包.接口及异常处理. 实验目的:掌握包.接口的声明与使用,掌握异常的处理 实验要求:独立完成实验内容. 七.实验内容: 1.编 ...

  9. java程序设计实验报告_JavA程序设计实验报告.doc

    Java程序设计实验报告 学号: 姓名: 座位号: 实验日期: [实验名称]: JDK配置与开发工具的使用 [实验目的]: 熟悉JDK开发环境. 熟悉EditPlus编辑器或Eclipse等开发环境的 ...

  10. 计算机网络邮件客户编程,北京理工大学-计算机网络实践-实验4POP3邮件客户程序.docx...

    北京理工大学-计算机网络实践-实验4POP3邮件客户程序 实验四 POP3 邮件客户程序实验目的电子邮件 E-Mail 是Internet 中广泛使用的服务之一,在Internet 电子邮件系统中,邮 ...

最新文章

  1. 机器学习应用的未来是什么?微型化
  2. kafka mysql安装与配置_Mac环境canal+mysql+kafka的安装及使用
  3. 内存淘汰机制 LRU cache
  4. linux nginx F配置,linux下nginx的安装及配置
  5. cad加载dll_你的CAD为什么安装不上?进来看看你就知道了
  6. web提升服务器性能,开启一个参数就能让你的WEB性能提升3倍
  7. Java Web学习总结(37)——Filter和Listener详解
  8. TensorFlow安装中碰到的问题汇总
  9. 更新Sogou代理服务器程序,支持HTTPS
  10. 拓端tecdat|python在Keras中使用LSTM解决序列问题
  11. 鸿蒙官方编辑器 DevEco Studio 2.0.12.201使用流程
  12. 计算机应用基础146jpg,计算机应用基础——复习题2.pdf
  13. Java应用在docker环境配置容器健康检查
  14. python初探偏微分方程数值解
  15. java NEW一个对象之后加入大括号
  16. 射灯安装方法图解_射灯如何安装—射灯的安装方法介绍
  17. 最常用到的35种心理效应集锦
  18. html5火焰字体效果前缀,ps制作火焰字体特效
  19. 这世界就是,一些人总在昼夜不停地运转,而另外一些人,起床就发现世界已经变了。...
  20. 实对称矩阵的特征值求法_机械振动理论(3)-解析实模态分析

热门文章

  1. 设计一个银行账户管理系统
  2. 两个python文件怎么联系在一起_一个连接两个文件的python脚本
  3. Web3 开发者平台 Infura 的用户数突破 35 万!
  4. C++中的虚析构函数
  5. vue动态发布到线上_从零开始搭建vue移动端项目到上线
  6. linux/mac vi命令详解
  7. 组网神器WireGuard安装与配置教程(超详细)
  8. 基于ChatGPT的智能文案生成键盘AI123-AI输入法的实际应用
  9. [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解
  10. gitlab ci cd流程