软件构造学习笔记-实验1

记录一下做实验1时遇到的问题。

准备工作

1.GitHub的注册和配置
由于之前没有接触过GitHub,所以碰到了一些问题。GitHub是什么?怎么建立GitHub远程仓库与本地仓库的连接?怎么在GitHub上传和下载文件?
实验完成后我可以简单回答上述问题:Git是分布式版本控制系统;通过SSH key建立远程与本地的连接;通过Git Bash中的命令进行文件的上传和下载。

图1-常用的git命令

GitHub新手详细教程
https://blog.csdn.net/Hanani_Jia/article/details/77950594?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
Git教程
https://www.liaoxuefeng.com/wiki/896043488029600

2.maven的配置和初步使用
由于实验要求代码完成后要从Eclipse环境脱离开来,所以我选择使用maven进行build。首先下载maven,在下载目录中打开apache-maven-3.6.3\conf\settings.xml(这里强烈建议使用Notepad++进行编辑,非常好用)。将图示位置修改成本地maven仓库的位置,本地maven仓库简单来说就是maven自动下载的外部库存放的位置。

图2-修改settings本地库的位置

然后如下位置添加阿里的镜像,之前没有添加时下载插件速度很慢甚至会失败。然后就能建立maven project了!

图3-修改setting的镜像地址

问题1

问题1主要涉及到Java的文件读写问题。由于之前对这部分不熟悉,我又把文件部分看了一遍,再做时思路就明确了。
题目中提示按行读入,那么我就用类java.io,BufferedReader进行读取。读取一行后,将其转化成字符数组并检查输入合法性。如果输入合法,则用String类的split方法,将字符串转化成字符串数组,再分别转化成数字,存放在二维数组中。当对所有行操作完毕时,对所得二维数组进行验证即可。
对各列求和时,想起计算机系统史老师教我们的,考虑到了局部性原理的问题。

图4-求数组每列的和

问题2

问题2比较困难的部分是convexHull的完成,也就是凸包问题。
当代码出现细微问题的时候,对它进行测试却发生了不可思议的问题。完成问题2的所有方法后,我用JUnit单独测试了每个方法,过了,非常开心。但是当我运行TurtleSoupTest的时候,裂开了,凸包没过。我很不甘心,把凸包测试方法的语句在main里重写一遍,发现跟答案一模一样。我又从测试方法里一步步debug,也没有发现问题。但是再运行TurtleSoupTest,还是报错。

图5-莫名其妙的错误

在piazza上求助,有人说换Eclipse试试( 我一直在用IDEA),我用Eclipse运行测试类,出现了绿条。在Eclipse上运行了一下convexHullTest方法,又报错了。
终于发现了一个不严谨的地方,修改之后一切都正常了。

图6-测试类通过

下面说一说我写的凸包算法的思路:
1.选取横坐标最小的点为起始点。如果有多个则选择纵坐标最大的。
2.标记起始点为已加入,每次循环遍历除自身外的所有点,从其余点中找到顺时针角度最小的点。
3.标记该点为起始点,重复2直到下一个找到的目标点为已加入的状态。
特殊情况:输入点数为0,1,2时,直接返回输入集合;多个点同时在一条边上时,创建并加入一个临时集合,在遍历完成后如果该集合的点满足角度最小,则选择边长最大的。

图7-每次遍历的操作

问题3

无向图的建立和广度优先搜索的问题。当定义好Person类之后,操作会比较简单。

图8-我定义的Person类

FriendshipGraph的方法除getDistance都比较简单。重点说一下getDistance方法的实现。
要采用广度优先搜索,我首先想到了队列。Java库中有队列的类,所以用起来很方便。当输入和输出为同一元素时,直接返回0即可。如果不同,则建立队列进行广搜。上学期的cxk实验让我对广搜的写法异常熟悉,很快就能写出来。

图9-利用队列完成广度优先搜索

关于Java队列类的成员方法,建议参考
Java 实例 - 队列(Queue)用法 https://www.runoob.com/java/data-queue.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好的自我介绍,面试成功一大半

大家好,我是Z哥。关于面试时的自我介绍,我想大家遇到的情况都差不多,大部分面试的第一个环节基本都是这个。每个人也都知道留下好的第一印象很重要,但我估计很多人对这件事的解决方式,也就在网上找个自我介绍的模版就完…

软件构造学习笔记-第三周

本周介绍了软件开发的几种模型,并重点介绍了Git。Git是分布式版本控制系统,可以通过SSH key建立远程与本地的连接,通过Git Bash中的命令进行文件的上传和下载。对于这门课程,Git的主要作用就是向TA提交实验代码。 软件开发生命周…

log4net直切ElasticSearch,小步快跑首选

很多小步快跑的公司,开发人员可能就3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期项目不稳定,bug又多,每次都…

软件构造学习笔记-第四周

本周重点介绍了mutable和immutable的概念,有些抽象。对于immutable的数据类型来说,想修改其引用指向的值,必须使其指向新的内存区域,而不能在原有的内存区域做修改。mutable数据类型相反,可以在原来指向的内存区域进行…

壹佰文章总结| 关于ASP.NETCore的分享之路

公众号不让放外网链接,点击【阅读原文】,去我的博客园,可以看对应的详细文章。(关于学习ASP.NET Core需要了解和掌握的知识点图)一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了&a…

软件构造学习笔记-第五周

本周讲了AF、RI、Safety from rep exposure、spec等概念。这些是辅助程序设计的重要部分,需要在代码中以注释的形式体现,可以显著提高代码可读性,明确设计的目的。必须要养成写的习惯!!! 设计规约 1.规约…

EFCore之SQL扩展组件BeetleX.EFCore.Extension

EFCore是.NETCore团队开发的一个ORM组件,但这个组件在执行传统SQL的时候并不方便,因此BeetleX.EFCore.Extension的设计目的是让EFCore执行传统SQL更简单方便。引用在使用组件之前需要引用它,可以通过以下地址获取最新版本https://www.nuget.o…

软件构造学习笔记-第六周

这周的重点是重载和重写。重载要求两方法的签名必须不同,而重写则要求两方法的签名必须相同。重载可以发生在同一个类中,也可以发生在父类和子类中;重写必须发生在父类和子类中。接口/抽象类不具有构造方法,只有将内部的抽象方法全…

云原生时代,.NET5必将称王!

“ 随着互联网持续高歌猛进,相关技术名词也是层出不穷。微服务、容器化、DevOps、ServerLess、FaaS,这两年最火的,当属云原生Cloud Native!当下大部分企业还在追逐微服务架构落地,而下一代的架构云原生已如火如荼。程序…

软件构造学习笔记-实验2

P1 1.设计目标 首先对图的ADT进行两种实现(从边和顶点出发),然后选择一种实现的ADT,根据输入的文件构建语料库,再利用构建的语料库,对输入字符串进行插入操作,并返回修改后的字符串。 2.有关AF…

海棠读社小程序研发(.Net Core版)

今天这篇博文是介绍海棠读社小程序开发的技术博文,由于博主是技术出身,开发过小程序和公众号,所以从决定做海棠读社开始就写代码了。因为只有技术和文化相结合,更能使传统文化大放异彩,更好地传播、讲好中国故事。漓江…

软件构造学习笔记-第七周

本周只有一节课,内容较少。对于不可变类型的相等比较,需要重写equals和hashCode方法,实现观察等价性。对于可变类型,不建议重写以上两方法,按照默认比较方式(比较内存地址)即可。 可变类型的相…

asp.net core监控—引入Prometheus(五)

上一篇博文中说到Prometheus有四种指标类型:Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要),并且我们做了一个Counter的Demo&#xff0c…

软件构造学习笔记-第八周

本周重点是Liskov可替换原则。它要求父类和子类的行为一致性,子类要有更强的不变量、更弱的前置条件、更强的后置条件。在该原则的要求下,每个子类都可以对父类进行替换。这在开发过程中会带来极大的便利,在实验3中学习并运用该原则。 有关复…

C# 中的只读结构体(readonly struct)

翻译自 John Demetriou 2018年4月8日 的文章 《C# 7.2 – Let’s Talk About Readonly Structs》[1]在本文中,我们来聊一聊从 C# 7.2 开始出现的一个特性 readonly struct。任一结构体都可以有公共属性、私有属性访问器等等。我们从以下结构体示例来开始讨论&#x…

软件构造学习笔记-第九周、第十周

因为本周五开始五一假期,所以只有一节软件构造课。因为内容还属于创建模式、结构模式、行为模式。将该堂课的内容整合到本博客中。本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发、维护。采用合适的设计模式帮助理清思路&a…

回顾 | 使用Visual Studio Code进行端到端应用程序开发

点击蓝字关注我们,获得更多课程吧~微软Reactor 为帮助广开发者,技术爱好者,更好的学习 Python,数据科学,机器学习,AI,区块链等技术,将每周三到周六,组织 3~5 场线上分享活…

软件构造学习笔记-第十一周

本周的内容是,比较各个设计模式的区别和联系,并介绍了状态模式和备忘录模式,以及正则表达式。正则表达式用于对文本文件的处理。在实验3中有一项要求是对输入文本进行解析,构造航班。要求表达式不仅要读入合法数据,还要…

实现 OutOfMemory​

通过代码实现 OutOfMemoryIntro来尝试写一个发生 OutOfMemoryException 的代码吧,开启煞笔代码第三篇 —— OutofMemoryOutOfMemoryOutOfMemory 顾名思义就是内存不足,在 .NET 中当内存不足的时候就会抛出 OutOfMemoryException 的异常。想要触发 OutOfM…

软件构造学习笔记-实验3

本次实验要求从五项要求(航班管理、高铁车次管理、操作系统进程管理、大学课表管理、学习日程管理)里完成三项要求,并且尽量实现复用。 面向可复用性和可维护性的设计:PlanningEntry 1.首先设计一个类CommonPlanningEntry来实现…