软件构造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

画了一个彩虹甜甜圈
 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编写性能对于较大的项目和代码库性能较低。

总结

软件构造作为软件工程专业的重要课程,涉及到软件设计、开发、维护等方面,对计算机学生来说非常有吸引力的。希望能够通过这门课程,深入了解软件构造的原理和方法,学习到实用的技能和工具,为今后的学习和工作打下坚实的基础。

软件构造课程较为综合,需要学生具备多方面的能力,如编程、算法、设计、测试等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值