软件构造Lab1小结

实验一作为入门实验,训练的能力相对基础,主要是一些基本的Java编程操作,本次实验通过求解三个问题,能够利用 Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。

在第一个任务即编写检测幻方的方法时,我们看到入参为String形式的filename,返回布尔值;也就是这个方法要完成文件的读操作,并且要根据文件内容实现检测是否是幻方;但首先我们会发现几个问题:读文件操作有概率会产生一个异常,IOException,即文件读写异常,类似下图。

众所周知,规避异常的很“有效”的方式就是使用try{}catch(Exception e){}来消除这些可能出现的异常,但是为什么要打双引号呢?因为这近似于一种掩耳盗铃的行为,“我不让他报错,就没有错!”但是实际上错误依然存在,如果根据路径找不到磁盘文件,使用try,catch也于事无补,那么我们能否尝试用一种检查入口的方式实现规避这种异常,例如在打开文件前,检测文件是否存在、文件路径是否正确来适当绕过不合理的文件操作呢?

其实这个方法从原理上可行,但是我们要一再小心,由于在运行时程序是有先后顺序的,而判断路径存在这一方法一定会在真正打开文件之前执行,如果在运行程序的过程中,程序已经判断路径正确后,我们以迅雷不及掩耳之势将文件删除或移动,那么异常还是会被抛出。因此这类异常会被归类为其他异常(不是程序员的代码处理不当导致的),是由于其他外部因素导致的。因此try{}catch(){}在处理这类异常是必要的。

此外,在完成任务一时,我们还会遇到第二个问题:我们输入的文本会以Char而不是integer类型的数据读入,因此我们不能直接对其进行加减乘除等运算。因此我们需要在类型转换。而并非所有Char型数据都是能有效转化成Int型数据,或者文本中根本就不符合幻方的要求,即为nXn数组,那么再将其转为二维数组之前,我们一定要检查文本的格式,简单符合了幻方要求后,再对每一行字符串切割。我们使用String的split方法,将其切割为小块,在判断每一个小块是否有正则表达式【0-9】+构成

如果不是,则文本显然不符合要求,如果都符合,那么就可以使用Integer的parseInt方法将数据类型转换为int,从而进行下一步判断。这也提醒我们检查入口是必要的。

第二个任务是完成画图工具turtlesoap的剩余工作,其难点主要在凸包算法,不过分研究。

第三个任务是完成人际网络,要求构建person类,来完成FriendshipGraph类。主要是简单的加边加点操作,也不过分研究,但是我们又会发现一个问题,在构造方法时,我们会发现有的方法是一个对象作用于另一个对象的,例如再加边时,是Friendship这个类对一个Person添加一条单向边,再联想到之前的猴子摘香蕉问题,猴子会主动搬箱子,抓取香蕉,以及爬上或跳下箱子。那我们在构造方法时应该在哪一个类中构建呢?我们主观印象会觉得猴子是主语,他做出了这些动作,应该将方法都添加到猴子类中,但事实上,我们会发现将方法添加到宾语,也就是箱子、香蕉、人这些类会更加方便,这是因为虽然猴子爬上或搬箱子,别的动物甚至某种类也可以完成这些动作,可以被搬,可以被攀爬或跳下是箱子的属性,因此我们在构造方法时要先判断好对谁创建一个方法,入参、返回值,规约,检查入口。这些对编写java程序至关重要。

此外,lab1还要求使用git作为版本管理工具,git常用指令已作为我的另一篇转载博客发表,因此进行不过多赘述。

综上,Lab1虽然是一个入门实验,要想完美解答并不容易,这些知识点仅供参考。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值