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

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

班级: 1723

姓名: 侯泽洋

学号:20172302

实验教师:王志强老师

实验日期:2018年4月18日

必修/选修: 必修

1.实验内容

  • 初步掌握单元测试和TDDhtml

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

  • 初步掌握UML建模git

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

  • 了解设计模式设计模式

  • 完成蓝墨云上 (1)-(5)实验。数据结构

2.实验过程及结果

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

  • (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个实验,感受任务量有点大,最主要的有的实验本身怎么作就是有错误,而别人那不须要调就能够直接进行,这就比较心急,越作越慌,此次实验作到后面还算好一点,但第四个实验作了很久才弄出来.

  • 后记:后面再翻看其余同窗码云时,发现本身实验四编写的较为麻烦一些,之后要注意简化代码,同时实验三也是出现了错误,后作修改。

参考资料

相关文章
相关标签/搜索