20192316 2020-2021-1 《数据结构与面向对象程序设计》实验三报告

20192316 2020-2021-1 《数据结构与面向对象程序设计》实验三报告

课程:《程序设计与数据结构》
班级: 1923
姓名: 贝世之
学号:20192316
实验教师:王志强
实验日期:2020年10月11日
必修/选修: 必修

1.实验内容

下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。

  1. 初步掌握单元测试和TDD

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

  3. 初步掌握UML建模

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

2. 实验过程及结果

2.1第一个提交点

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

http://www.cnblogs.com/rocedu/p/6736847.html

提交最后三个测试用例都通过的截图。

代码:

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 "错误";
    }
}

测试代码:

import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
    @Test
    public void testNormal() {              //测试用例,正常情况
        assertEquals("不及格", MyUtil.percentage2fivegrade(55));
        assertEquals("及格", MyUtil.percentage2fivegrade(65));
        assertEquals("中等", MyUtil.percentage2fivegrade(75));
        assertEquals("良好", MyUtil.percentage2fivegrade(85));
        assertEquals("优秀", MyUtil.percentage2fivegrade(95));
    }
    @Test
    public void testExceptions() {          //测试用例,错误情况
        assertEquals("错误", MyUtil.percentage2fivegrade(-55));
        assertEquals("错误", MyUtil.percentage2fivegrade(105));
    }
    @Test
    public void testBoundary() {            //测试用例,边界情况
        assertEquals("不及格", MyUtil.percentage2fivegrade(0));
        assertEquals("及格", MyUtil.percentage2fivegrade(60));
        assertEquals("中等", MyUtil.percentage2fivegrade(70));
        assertEquals("良好", MyUtil.percentage2fivegrade(80));
        assertEquals("优秀", MyUtil.percentage2fivegrade(90));
        assertEquals("优秀", MyUtil.percentage2fivegrade(100));
    }
}

运行结果:

2.2第二个提交点

参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)

http://www.cnblogs.com/rocedu/p/6736847.html

以TDD的方式研究学习StringBuffer,提交单元测试用例和测试通过的截图。

代码:

public class StringBufferDemo{
	public static void main(String [] args){
		StringBuffer buffer = new StringBuffer();
		buffer.append('S');
		buffer.append("tringBuffer");
		System.out.println(buffer.charAt(1));
		System.out.println(buffer.capacity());
		System.out.println(buffer.indexOf("tring"));
		System.out.println("buffer = " + buffer.toString());
	}
}

测试代码:

import junit.framework.TestCase;

public class StringBufferDemoTest extends TestCase {
    StringBuffer a = new StringBuffer("wanglaoshitaiqiangle");
    StringBuffer b = new StringBuffer("zhujiaoyehenqiang");
    StringBuffer c = new StringBuffer("wotaicaile555");

    public void testcharAt(){                    //字符索引测试
        assertEquals('w',a.charAt(0));
        assertEquals('o',b.charAt(6));
        assertEquals('5',c.charAt(10));
    }

    public void testcapacity(){                  //测试caoacity(),发现其返回的数值是length()+16
        assertEquals(36,a.capacity());
        assertEquals(33,b.capacity());
        assertEquals(29,c.capacity());
    }

    public void testlength(){                    //字符串长度测试
        assertEquals(20,a.length());
        assertEquals(17,b.length());
        assertEquals(13,c.length());
    }

    public void testindexOf(){                   //子串匹配测试
        assertEquals(0,a.indexOf("wanglaoshi"));
        assertEquals(3,b.indexOf("jiao"));
        assertEquals(10,c.indexOf("555"));
    }
}

运行结果:

2.3第三个提交点

Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

http://www.cnblogs.com/rocedu/p/6736847.html

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

学号16%6取余为4:

4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

代码修改:

// Server Classes
abstract class Data {
    abstract public void DisplayValue();
}
class Floateger extends Data {
    float value;
    Floateger() {
        value=55.55f;                //浮点数+f
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
// Pattern Classes
abstract class Factory {
    abstract public Data CreateDataObject();
}
class FloatFactory extends Factory {
    public Data CreateDataObject(){
        return new Floateger();
    }
}
//Client classes
class Document {
    Data pd;
    Document(Factory pf){
        pd = pf.CreateDataObject();
    }
    public void DisplayData(){
        pd.DisplayValue();
    }
}
//Test class
public class MyDoc {
    static Document d;
    public static void main(String[] args) {
        d = new Document(new FloatFactory());
        d.DisplayData();
    }
}

运行结果:

2.4第四个提交点

提交:单元测试代码和运行成功截图及码云上代码链接。

参考 http://www.cnblogs.com/rocedu/p/6736847.html

任务:以TDD的方式开发一个复数类Complex,要求如下:

// 定义属性并生成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)

代码:

链接:https://gitee.com/besti1923/beishizhi/blob/master/src/Complex.java

public class Complex{
    double RealPart;
    double ImagePart;

    //定义构造函数,定义复数的实部变量a和虚部变量b
    public Complex(double a,double b){
        this.RealPart = a;
        this.ImagePart = b;
    }

    //覆盖对象,判断boolean
    public String toString(){
        return "RealPart:" + RealPart + ", ImagePart:" + ImagePart;
    }
    public boolean equals(Object z1){
        if (z1 == this){
            return true;
        }
        else{
            return false;
        }
    }

    //定义加减乘除子函数
    public Complex ComplexAdd(Complex z2){
        Complex z3 = new Complex(this.RealPart + z2.RealPart,this.ImagePart + z2.ImagePart);
        return z3;
    }
    public Complex ComplexSub(Complex z2){
        Complex z3 = new Complex(this.RealPart - z2.RealPart,this.ImagePart - z2.ImagePart);
        return z3;
    }
    public Complex ComplexMulti(Complex z2){
        Complex z3 = new Complex(this.RealPart * z2.RealPart - this.ImagePart * z2.ImagePart,
                this.ImagePart * z2.RealPart + this.RealPart * z2.ImagePart);
        return z3;
    }
    public Complex ComplexDiv(Complex z2){
        double t = z2.RealPart * z2.RealPart + z2.ImagePart * z2.ImagePart;
        Complex z3 = new Complex((this.RealPart * z2.RealPart + this.ImagePart * z2.ImagePart) / t,
                (this.ImagePart * z2.RealPart - this.RealPart * z2.ImagePart) / t);
        return z3;
    }
}

测试代码:

链接:https://gitee.com/besti1923/beishizhi/blob/master/test/ComplexTest.java

import junit.framework.TestCase;
import org.junit.Test;

public class ComplexTest extends TestCase {
    Complex z1 = new Complex(4.0,2.0);
    Complex z2 = new Complex(1.0,-1.0);
    @Test
    public void testequals() {
        assertEquals(true, z1.equals(z1));
        assertEquals(false, z1.equals(z2));
    }
    @Test
    public void testComplexAdd() {
        assertEquals("RealPart:5.0, ImagePart:1.0", z1.ComplexAdd(z2).toString());
    }
    @Test
    public void testComplexSub() {
        assertEquals("RealPart:3.0, ImagePart:3.0", z1.ComplexSub(z2).toString());
    }
    @Test
    public void testComplexMulti() {
        assertEquals("RealPart:6.0, ImagePart:-2.0", z1.ComplexMulti(z2).toString());
    }
    @Test
    public void testComplexDiv() {
        assertEquals("RealPart:1.0, ImagePart:3.0", z1.ComplexDiv(z2).toString());
    }
}

运行结果:

上传码云:

2.5第五个提交点

使用WhiteStarUML对实验二中的代码进行建模,发类图的截图。
参考:http://www.cnblogs.com/rocedu/p/6736847.html

类图中至少两个类。

对应第一个提交点:

对应第二个提交点:

对应第四个提交点:

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

  • 问题1:本次实验提供的学习资料 https://www.cnblogs.com/rocedu/p/4472842.html 图片大多加载不出来

  • 问题1解决方案:娄老师在该网站最下方给出了解决方法,携带邀请码前往实验楼。

  • 问题2:junit和Test出现异常(红色字体)

  • 问题2解决方案:点击红字,左方会出现小灯泡,按小灯泡的提示走_

  • 问题3:第二个提交点莫名红字

  • 问题3解决方案:类名后加上Demo后解决问题

  • 问题4:数值有小数点时被认为是double类型而不是float类型

  • 问题4解决方案:在数值后加上f

  • 问题5:第四个提交点的测试代码中,预期和实际相符却报错。

  • 问题5解决方案:此处为void类型而不是String类型,去掉“”。

其他(感悟、思考等)

有一点难,有亿点多=_=。

参考资料

posted on 2020-10-11 20:07  王老师铁杆粉  阅读(238)  评论(0编辑  收藏  举报

导航