软件构造Lab1实验要点总结
本实验通过解决三个问题,训练了基本的Java编程技能,并给出了Eclipse+Jdk+Junit的配置方案,以及对使用git进行项目管理的方式。
1.因此,本实验的第一个要点是配置环境。具体配置环境过程如下:
Eclipse(IDE):直接从官网上安装,按默认配置进行即可。
Jdk:官网下载,在eclipse中Windows->preferences->Java->Installed JREs,然后把下的jdk8的最新版本add,然后apply即可。(之前配的18,所以没遇到困难)
Junit:eclipse配置时自带,对项目使用测试时右键项目->build path->点module->右边add library->找junit后apply即可。之后新建测试文件只要使用assert等方法即可。
Git:遇到一些困难,主要在于安装哪个GUI能够更方便的管理仓库。后来决定下载GitHub Desktop,因为可以方便地直接关联GitHub,图形界面建仓库以及上传本地仓库。唯一的缺点可能是不能使用git的所有功能,但鉴于实验本身需要的git功能完全被GitHub Desktop包含,也用不到命令行,所以就用这个了。
(注意:在后续实验中依据不同的实验要求可能会使用git命令行来管理项目。因此,依照后续要求变化,可能会增加git的相关使用要点。)
2.Magic Squares实验中,magic square的定义是:n阶幻方是n×n个数(通常是不同的整数)在一个方格中的排列,使得所有行、所有列和两条对角线中的n个数总和为同一常数。本实验包含判断是否是magic square以及生成magic square两个方法(函数),其中使用的数据结构以及调用的函数都不是很难,重点在于对输入内容的异常判断,这影响了你对输入的magic square的判断方法,如果读入时候全部循环一行行读就很难插入方法。
这里我的处理方式是:对于是否是矩阵以及矩阵符合要求的判断由于行数不多,就没有单独拿出来处理。但是否是矩阵需要判断第一行当行数的标志物,所以我单独把对读入的第一行进行处理了。数字间分割以及是否是正整数这种就单独分出函数即可。
3.Turtle Graphics实验中,大部分代码(包括相对关键的Turtle类以及实现GUI的类)都是给出的,只需要我们补全一个方法的代码。这当然大大降低了我们这个实验的难度。然而,这个实验也是有一定难度的。其难度主要是在凸包算法那里:凸包算法用java实现是一件不容易的事情。首先函数的参数是一组点的集合,使用的是set方法,把一组点集合起来。但set由于底层实现是HashMap(HashSet也是由HashMap实现的),所以点的顺序是不固定的,这就意味着我必须找一种类似于链表的方式重新存这些点,还要了解这种结构的各种方法。然后还要找最左下角的点,并对剩下点进行各种排序,最后用橡皮筋方法算点的时候还要确定范围,不能出界。循环的时候要注意对范围的变化要时刻标记,否则很容易出界。其他就没什么了,个人艺术设计也很有意思,难度不大又有创造性。
4.Social Network中,主要要点在于遍历无向图时由于底层实现是有向图,我们的处理需要比较恰当,还有用bfs遍历无向图的时候计算距离应当单独开新变量,而不是计算循环次数,因为循环次数是所有点的和,而不是距离的叠加。具体来说,我在person类中新建一个private变量distance,专门用来计算bfs遍历的时候树上每个点距离树根的大小,这样找到点时即可输出正确结果。
以上就是我总结的本实验的要点,希望对大家有所帮助。
软件构造Lab1实验要点总结的更多相关文章
- 软件构造 Lab1
大二软件构造第一次实验 本人本次实验操作系统:macOS high Sierra 10.13.3 任务一:MagicSquare 对于本任务,主要需要实现两个方法,一个是isLegalMagicSqu ...
- 哈工大软件构造Lab1(2022)
目录 一.实验目标概述 二.实验环境配置 1.安装编写java程序的IDE--IntelliJ IDEA 2.安装Git 3.安装Junit 4.GitHub Lab1仓库的URL地址 三.实验过程 ...
- 软件构造Lab2实验总结
本次实验训练抽象数据类型(ADT)的设计.规约.测试,并使用面向对象编程(OOP)技术实现ADT.具体来说内容如下: 针对给定的应用问题,从问题描述中识别所需的ADT: 设计ADT规约(pre-con ...
- 哈工大软件构造Lab2(2022)
(防扒小助手) 本人CSDN博客: https://blog.csdn.net/m0_61753302https://blog.csdn.net/m0_61753302本人博客园博客(同步CSDN): ...
- 哈工大软件构造Lab3(2022)
(防扒小助手) 本人CSDN博客: https://blog.csdn.net/m0_61753302 本人博客园博客(同步CSDN): 何以牵尘 - 博客园 (cnblogs.com)https:/ ...
- 麻省理工18年春软件构造课程阅读02“Java基础”
本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材 ...
- HIT2019春软件构造->Git&Github学习笔记
由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作 1.基本信息设置(设置签名) 命令 项目级别/仓库级别:仅在当前本地库范围内有效 git ...
- 面向对象软件构造 (Bertrand Meyer 著)
Part A: The Issues 议题 第一章 软件品质 第二章 面向对象的标准 Part B: The Road To Object Orientation 通向面向对象之路 第三章 模块性 第 ...
- 由软件构造引申的OOP与POP的心得体会
在大一初学C语言的时候,所解决的问题都是一些轻量级的简单问题,当时写过一个教学管理系统.这个教学管理系统的功能很简单,思想就是“流水线”:按部就班的实现所有流程.要完成整个教学管理系统,实际上就是完成 ...
随机推荐
- java中Object类的getClass方法有什么用以及怎么使用?
Object类的getClass的用法: Object类中有一个getClass方法,m a r k- t o- w i n:它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象 ...
- 牛客网-剑指Offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- Android修改app图标
1.按照路径找到AndroidManifest.xml中的icon 2.在drawable添加一个png图片 3.然后在AndroidManifest.xml中的icon,修改其中的值 android ...
- CSS简单样式练习(五)
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- 【LeetCode】358.K 距离间隔重排字符串
358.K 距离间隔重排字符串 知识点:哈希表:贪心:堆:队列 题目描述 给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少 ...
- 【面试普通人VS高手系列】Spring Boot的约定优于配置,你的理解是什么?
对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的? 普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关 ...
- RTSP可用网络流
推荐个音视频学习的网站 https://www.zzsin.com,里面有音视频学习资料和测试视频提供下载B站搜乔红 rtsp://wowzaec2demo.streamlock.net/vod/mp ...
- 聊一聊Redis的离线分析
背景 Redis 或许是我们大部分场景都会用到的一个利器,虽然是利器,用的姿势不对的话,终究还是会整出幺蛾子的. 比较常见的问题,不外乎内存暴增,慢查询等情况. 那么对于内存问题,可以借助redis自 ...
- python 多进程共享全局变量之Manager()
Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和A ...
- 使用aspnetcore前后端分离开发,你一定要知道这个
前言 用过Vue单页面应用开发的,一定都知道Vue-router这个路由组件,它支持hash和history两种模式. HTML5 History 模式 vue-router 默认 hash 模式 - ...