软件构造lab1小结
此次实验
实验目标概述
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用Java OO开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。 另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
- 基本的 Java OO 编程
- 基于 Eclipse IDE 进行 Java 编程
- 基于 JUnit 的测试
- 基于 Git 的代码配置管理
实验环境配置
使用IntelliJ IDEA进行开发
实验题目
Magic Squares
此任务要求判断和生成“魔法方阵”。一个n阶的魔法方阵是一个由n×n个数字(通常是不同的整数)排列而成的正方形。的整数排列在一个正方形中,使得所有行、所有列和两个对角线上的n个数字的总和为同一个常数。
要求编写isLegalMagicSquare()
函数检测Magic Square,并理解和改进generateMagicSquare()
方法。
isLegalMagicSquare()
打开一个文件流,按行进行读取,使用split分割数字;读取的同时验证是否为方阵、数字是否为整数、数字间是否使用\t分割等。
读完后,将每行、每列、两条对角线上的数字分别加和然后判断是否相等即可。
3.1.2 generateMagicSquare()
Turtle Graphics
Logo是麻省理工学院创造的一种编程语言,最初是用来在太空中移动机器人的。海龟图形被添加到Logo语言中,允许程序员向屏幕上的 "海龟 "发出一系列命令,海龟移动时画出一条线。乌龟图形也被添加到许多不同的编程语言中,包括Python,它是标准库的一部分。
在这组问题中,我们将玩一个简单的海龟图形的Java版本,它包含Logo语言的一个限制性子集。
Calculating Bearings
实现calculateBearingToPoint:
- 使用Math.atan2(targetY - currentY, targetX - currentX)求出要旋转到的方向向量的方向角(弧度制,逆时针)。
- 则要顺时针旋转的角度为-Math.atan2(targetY - currentY, targetX - currentX) * 180 / Math.PI + 90 – currentBearing。
然后取非负值if (d < 0) d = d + 360。 - 测试通过。
实现calculateBearings:
- 初始化currentBearing=0,求出每次要旋转的角度currentBearing = calculateBearingToPoint(currentBearing,xCoords.get(i - 1), yCoords.get(i - 1),xCoords.get(i), yCoords.get(i))。
- 测试通过。
Personal art
画了一个彩虹甜甜圈
public static void drawPersonalArt(Turtle turtle) {
PenColor[] colors = new PenColor[]{
PenColor.BLACK,
PenColor.GRAY,
PenColor.RED,
PenColor.PINK,
PenColor.ORANGE,
PenColor.YELLOW,
PenColor.GREEN,
PenColor.CYAN,
PenColor.BLUE,
PenColor.MAGENTA};
for (int t = 0; t < 120; t++) {
turtle.color(colors[t % colors.length]);
for (int i = 0; i < 360; i++) {
turtle.forward(2);
turtle.turn(1);
}
turtle.forward(2);
turtle.turn(3);
}
}
Social Network
实现并测试一个FriendshipGraph类,该类表示社交网络中的友谊,并能计算图中两个人的距离。还需要实现一个辅助类Person。
你应该将社交网络建模为一个无向图,其中每个人都与零个或多个人相连,但你的底层图实现应该是有向的。是有方向的。
FriendshipGraph类
使用邻接表存储有向图
实现getDistance()
:使用层序遍历搜索即可
Person类
仅需一个private成员储存姓名
注意重写equals方法和hashCode方法,以便根据姓名成员判断对象相等
一些问题
关于Eclipse或IntelliJ IDEA,它们作为IDE的优势和不足
Eclipse的优势:
- 开源,可以轻松地进行自定义和扩展。
- 有大量的插件和工具可用,可以支持多种编程语言和技术。
- 调试器非常强大,可以帮助开发人员更轻松地调试应用程序。
- 性能非常出色,可以快速编译和运行应用程序。
Eclipse的不足:
- 界面相对较复杂。
- 需要大量的插件和配置才能实现最佳的开发体验。
- 自动完成和代码提示功能相对较弱。
IntelliJ IDEA的优势:
- 自动完成和代码提示功能非常强大,可以极大地提高开发人员的效率。
- 可以帮助开发人员更快地查找和修复代码中的错误。
- 界面非常直观。
IntelliJ IDEA的不足:
- 高级版本需要付费使用。
- 插件生态较弱。
- Java编写性能对于较大的项目和代码库性能较低。
总结
软件构造作为软件工程专业的重要课程,涉及到软件设计、开发、维护等方面,对计算机学生来说非常有吸引力的。希望能够通过这门课程,深入了解软件构造的原理和方法,学习到实用的技能和工具,为今后的学习和工作打下坚实的基础。
软件构造课程较为综合,需要学生具备多方面的能力,如编程、算法、设计、测试等。