Java实践(实验一)
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
- 实验目标概述
本实验通过求解三个问题,训练基本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
- 通过阅读指导书我们知道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实践(实验一)相关推荐
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- java泛型实验报告,java实验报告异常集合类和泛型
java实验报告异常集合类和泛型 成绩: 面向对象原理与 Java 实践课程实验报告实验 3:异常.集合类和泛型姓 名 _ ___ 班 级 _ ___ 学 号 _ ___ 实验地点 _ ___ 实验时 ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20175212童皓桢 实验三敏捷开发与XP实践实验报告
20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...
- 《Python程序设计》实验四 Python综合实践实验报告
<Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...
- java合肥工业大学考试题库_合肥工业大学java程序设计实验二
合肥工业大学java程序设计实验二 1 / 3<Java 程序设计>实验报告--实验 2实验室:三.四机房 2014 年 05 月 22日学院 计算机与信息学院 专业班级 姓名 成绩课程名 ...
- Java程序设计 实验三
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:李海空 学号:20135329 成绩: 指 ...
- java上机六,Java上机实验6.doc
Java上机实验6 实验六 实验时间: 实验班级: 指导老师: 实验名称:包.接口及异常处理. 实验目的:掌握包.接口的声明与使用,掌握异常的处理 实验要求:独立完成实验内容. 七.实验内容: 1.编 ...
- java程序设计实验报告_JavA程序设计实验报告.doc
Java程序设计实验报告 学号: 姓名: 座位号: 实验日期: [实验名称]: JDK配置与开发工具的使用 [实验目的]: 熟悉JDK开发环境. 熟悉EditPlus编辑器或Eclipse等开发环境的 ...
- 计算机网络邮件客户编程,北京理工大学-计算机网络实践-实验4POP3邮件客户程序.docx...
北京理工大学-计算机网络实践-实验4POP3邮件客户程序 实验四 POP3 邮件客户程序实验目的电子邮件 E-Mail 是Internet 中广泛使用的服务之一,在Internet 电子邮件系统中,邮 ...
最新文章
- 机器学习应用的未来是什么?微型化
- kafka mysql安装与配置_Mac环境canal+mysql+kafka的安装及使用
- 内存淘汰机制 LRU cache
- linux nginx F配置,linux下nginx的安装及配置
- cad加载dll_你的CAD为什么安装不上?进来看看你就知道了
- web提升服务器性能,开启一个参数就能让你的WEB性能提升3倍
- Java Web学习总结(37)——Filter和Listener详解
- TensorFlow安装中碰到的问题汇总
- 更新Sogou代理服务器程序,支持HTTPS
- 拓端tecdat|python在Keras中使用LSTM解决序列问题
- 鸿蒙官方编辑器 DevEco Studio 2.0.12.201使用流程
- 计算机应用基础146jpg,计算机应用基础——复习题2.pdf
- Java应用在docker环境配置容器健康检查
- python初探偏微分方程数值解
- java NEW一个对象之后加入大括号
- 射灯安装方法图解_射灯如何安装—射灯的安装方法介绍
- 最常用到的35种心理效应集锦
- html5火焰字体效果前缀,ps制作火焰字体特效
- 这世界就是,一些人总在昼夜不停地运转,而另外一些人,起床就发现世界已经变了。...
- 实对称矩阵的特征值求法_机械振动理论(3)-解析实模态分析
热门文章
- 设计一个银行账户管理系统
- 两个python文件怎么联系在一起_一个连接两个文件的python脚本
- Web3 开发者平台 Infura 的用户数突破 35 万!
- C++中的虚析构函数
- vue动态发布到线上_从零开始搭建vue移动端项目到上线
- linux/mac vi命令详解
- 组网神器WireGuard安装与配置教程(超详细)
- 基于ChatGPT的智能文案生成键盘AI123-AI输入法的实际应用
- [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解
- gitlab ci cd流程