20172302 2017-2018-2 《程序设计与数据结构》实验二报告

课程:《程序设计与数据结构》

班级: 1723

姓名: 侯泽洋

学号:20172302

实验教师:王志强老师

实验日期:2018年4月18日

必修/选修: 必修

1.实验内容

  • 初步掌握单元测试和TDD

  • 理解并掌握面向对象三要素:封装、继承、多态

  • 初步掌握UML建模

  • 熟悉S.O.L.I.D原则

  • 了解设计模式

  • 完成蓝墨云上 (1)-(5)实验。

2.实验过程及结果

  • (1).完成5个实验,课上完成两个,课下完成三个。

  • (2).第一个实验:学习并了解单元测试;认识编程中三种码:伪代码、产品代码、测试代码;接下来就是开始实验,对我们所编写的类进行测试,这个实验实验中我们共完成了三种测试,分别是:测试正常、测试异常、测试边界;

public class MyUtil{
   public static String percentage2fivegrade(int grade){
       //如果成绩小于0,转成“错误”
       if ((grade < 0))
           return "错误";
       //如果成绩小于60,转成“不及格”
       else if (grade < 60)
           return "不及格";
       //如果成绩在60与70之间,转成“及格”
       else if (grade < 70)
           return "及格";
       //如果成绩在70与80之间,转成“中等”
       else if (grade < 80)
           return "中等";
       //如果成绩在80与90之间,转成“良好”
       else if (grade < 90)
           return "良好";
       //如果成绩在90与100之间,转成“优秀”
       else if (grade <= 100)
           return "优秀";
       //如果成绩大于100,转成“错误”
       else
           return "错误";
   }
}

接下来就是完成实验测试,使用Junit完成上述的三个测试。实验项目一代码链接1,实验项目一代码链接2

  • (3).进行第二个实验:学习使用StringBuffer类,从API文档上查阅了StringBuffer类的一些方法,并完成相关测试,使用JUnit完成了单元测试,实验项目二代码链接,下图是实验结果:

  • (4).第三个实验:在这里读错了题目,以为是要将所列的类都要进行代码补充,后来改了回来,对自己学号%6取余结果为2,故完成了(2)Boolean类,在MyDoc中也添加了测试代码,这里经学长指正做了修改,参见问题6修改后代码链接

  • (5).第四个实验:以TOD的方式开发复数类,并完成这些要求:

// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
// 定义构造函数
public Complex()
public Complex(double R,double I)

//Override Object
public boolean equals(Object obj)
public String toString()

// 定义公有方法:加减乘除
Complex ComplexAdd(Complex a)
Complex ComplexSub(Complex a)
Complex ComplexMulti(Complex a)
Complex ComplexDiv(Complex a)

做这个实验花的时间比较长,对复数运算还算清楚,但在编写代码时也花了力气设计出来代码,实验四代码链接1,实验四代码链接2.最后实验结果如下:

  • (6).最后一个实验:这个实验参考资料上没有将WhiteStarUML的具体使用方法,做起来也比较费时,网上也没有找到教程,最后就是乱点一点点的试,实验还算做完了,结果如图:

3. 实验过程中遇到的问题和解决过程

  • 问题1:在使用Junit时切换了字符集,遇到字符集错误,也就是乱码了,导致以前的许多程序也不能再运行,具体见下图:

  • 问题1解决方案:这里是在课上,就随即问了学长,学长也没有解决,但注意到了学长在调换字符集,后面自己就是乱尝试,当把字符集切换成US-ASCII时,终于又调了回来,后来课上老师也给出了解决方案,但好像是不太一样。

  • 问题2:一个小错误,在使用Junit进行测试时,有三个测试,但只有两个测试显示通过,另外一个始终没有反应,不显示通过或失败。

  • 问题2解决方案:后来还上去找老师问了问,老师检查完看出了编写错误,把test写成了text,导致那个测试始终没有运行,修改之后正常。到现在还在犯拼写错误,以后自己再想老师学长问问题时一定要多检查几遍,不要出现编写错误去让别人检查。

  • 问题3:就是关于实验项目四中的Complex编写,先是小问题,return语句始终加红线错误,不明白是错在哪里了,见下图:

  • 问题3解决方案:关于这种复数形式,我想起了之前的第七章例题那个分数运算,然后翻书找了那个书上的代码,编写的情况如下(这里取一小段说明):

public RationalNumber add(RationalNumber op2)
   {
     int commonDenominator = denominator * op2.getDenominator();
     int numerator1 = numerator * op2.getDenominator();
     int numerator2 = op2.getNumerator() * denominator;
     int sum = numerator1 + numerator2;

     return new RationalNumber(sum,commonDenominator);
   }

这时便发现了我的错误在哪,我的return语句中缺少new运算符,加上之后,语句变为return new Complex(RealPart,ImagePart);,这样红线消失,继续编写。

  • 问题4:继续编写Complex类,又出现了问题,具体情况见下图:

  • 问题4解决方案:这里其实首先是在测试时结果不正确,但在那里不太好分析,我就又写了mycomplex类用来实现这个Complex类,并对它进行了Debug调试,在这里到了做运算的这一步,就点了step into,进入里面一步步进行,进去之后调了好几遍才发现问题。拿这个为例,我本来没有写double realpart = Realpart ;这条语句,而是直接这样的语句:
RealPart = RealPart*obj.RealPart-ImagePart*obj.ImagePart;
ImagePart = RealPart*obj.ImagePart+ImagePart*obj.RealPart;
return new Complex(RealPart,ImagePart);

这样的错误是什么呢,就是我把做完操作、已经发生改变的RealPart代入到了下面的一条语句,而下面的语句需要的是我最初的那个RealPart,这里就发生了错误,于是就新建一个变量,让它等于最初的RealPart,然后把它用到下面的这条语句中,这时就可以保证我们想要的结果了。

  • 问题5:遇到的还有这个问题,就是两个结果是一样,但是那个预测结果和实际结果显示出来的包是不一样的,也就是两个数据类型不同,测试不通过。

  • 问题5解决方案:这个在蓝墨云上进行了提问,班主任的解答是这样,但是并没有给出答案,如何修改,最后是看了下别人的最后的这个类型转换,我也去查了查这个类型转换,最后是修改了这个语句assertEquals(3.0+"+5.0i",String.valueOf(a.ComplexAdd(c)));这样就测试通过,实验完成。查到的数据类型转换,已附到参考链接中

  • 问题6:蓝墨云实验提交后,实验三学长指出其中存在的错误,按照学号取余20172302%6 = 2,我对应的应该是Boolean类,按照需求,Boolean类应对应Boolean类型的值。

  • 问题6解决方案:这里对学长提出的进行了改正,将数据类型改为了Boolean类型,完成修改,修改后截图:

其他(感悟、思考等)

  • 这周的实验花了很多时间,幸好书上的章节并不是很难,那个完成的比较快,才有时间去完成这些实验,每次实验都是比较费力劳神的感觉,而且这一次一下留了5个实验,感觉任务量有点大,最主要的有的实验自己怎么做就是有错误,而别人那不需要调就可以直接进行,这就比较心急,越做越慌,这次实验做到后面还算好一点,但第四个实验做了好久才弄出来.

  • 后记:后面再翻看其他同学码云时,发现自己实验四编写的较为麻烦一些,以后要注意简化代码,同时实验三也是出现了错误,后做修改。

参考资料

posted @ 2018-04-24 14:26  ◕‿◕  阅读(401)  评论(6编辑  收藏  举报
© 2018 GitHub, Inc.