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

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

  • 课程:《数据结构与面向对象程序设计》
  • 班级: 1923
  • 姓名: 常万里
  • 学号: 20192307
  • 实验教师:王志强老师
  • 实验日期:2020年10月8日
  • 必修/选修: 必修

一、实验内容

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

    1. 初步掌握单元测试和TDD;
    1. 理解并掌握面向对象三要素:封装、继承、多态;
    1. 初步掌握UML建模;
    1. 完成蓝墨云上 (1)-(5)实验。

二、实验过程及结果

(一)Myutil及MyutilTest的编写

产品代码

package NBE3;

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

测试代码

package NBE3;

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

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(55));
    }

    @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));
    }
}

运行结果截图



(二)StringBuffer及StringBufferTest的编写

产品代码

package NBE5;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Shape Of My Heart
 * \* Date: 2020/10/8
 * \* Time: 15:43
 * \* Besides,some of the best things in life are total mistakes.
 * \* Description:
 * \
 **/

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());

    }
}

测试代码

package NBE5;

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

public class StringBufferDemoTest extends TestCase {
    StringBuffer a = new StringBuffer("StringBuffer");
    StringBuffer b = new StringBuffer("StringBufferStringBuffer");
    StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
    @Test
    public void testcharAt()throws Exception{
        assertEquals('S',a.charAt(0));
        assertEquals('g',a.charAt(5));
        assertEquals('r',a.charAt(11));
    }
    @Test
    public void testcapacity()throws Exception{
        assertEquals(28,a.capacity());
        assertEquals(40,b.capacity());
        assertEquals(52,c.capacity());
    }
    @Test
    public void testlength()throws Exception{
        assertEquals(12,a.length());
        assertEquals(24,b.length());
        assertEquals(36,c.length());
    }
    @Test
    public void testindexOf()throws Exception{
        assertEquals(0,a.indexOf("Str"));
        assertEquals(5,a.indexOf("gBu"));
        assertEquals(8, c.indexOf("ffer"));
    }
}

运行结果截图



(三)OCP原则和DIP原则的应用

package NBE7;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Shape Of My Heart
 * \* Date: 2020/10/10
 * \* Time: 20:52
 * \* Besides,some of the best things in life are total mistakes.
 * \* Description:
 * \
 **/

abstract class Data {
    abstract public void DisplayValue();
}

class Integer extends Data {
    int value;

    Integer() {
        value = 20192307 % 6;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Byte extends Data {
    byte value;

    Byte() {
        value = 20192307 % 6;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Short extends Data {
    short value;

    Short() {
        value = 20192307 % 6;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Boolean extends Data {
    boolean value;

    Boolean() {
        value = 20192307 % 6 == 4;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Long extends Data {
    long value;

    Long() {
        value = 20192307;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Double extends Data {
    double value;

    Double() {
        value = 20192307 % 6;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

class Float extends Data {
    float value;

    Float() {
        value = 20192307 % 6;
    }

    public void DisplayValue() {
        System.out.println(value);
    }
}

// Pattern Classes
abstract class Factory {
    abstract public Data CreateDataObject();
}

class IntFactory extends Factory {
    public Data CreateDataObject() {
        return new Integer();
    }
}

class ByteFactory extends Factory {
    public Data CreateDataObject() {
        return new Byte();
    }
}

class ShortFactory extends Factory {
    public Data CreateDataObject() {
        return new Short();
    }
}

class BoolenFactory extends Factory {
    public Data CreateDataObject() {
        return new Boolean();
    }
}

class LongFactory extends Factory {
    public Data CreateDataObject() {
        return new Long();
    }
}

class DoubletFactory extends Factory {
    public Data CreateDataObject() {
        return new Double();
    }
}

class FloatFactory extends Factory {
    public Data CreateDataObject() {
        return new Float();
    }
}

//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 IntFactory());
        d.DisplayData();
        d = new Document(new ByteFactory());
        d.DisplayData();
        d = new Document(new ShortFactory());
        d.DisplayData();
        d = new Document(new BoolenFactory());
        d.DisplayData();
        d = new Document(new LongFactory());
        d.DisplayData();
        d = new Document(new DoubletFactory());
        d.DisplayData();
        d = new Document(new FloatFactory());
        d.DisplayData();
    }
}

运行结果截图








(四)以TDD的方式开发一个复数类Complex

产品代码

package NBE2;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Shape Of My Heart
 * \* Date: 2020/10/10
 * \* Time: 21:16
 * \* Besides,some of the best things in life are total mistakes.
 * \* Description:
 * \
 **/

public class Complex {
    // 定义属性并生成getter,setter
    double RealPart;
    double ImagePart;

    // 定义构造函数
    public Complex() {
        RealPart = 0;
        ImagePart = 1;
    }

    public Complex(double R, double I) {
        ImagePart = I;
        RealPart = R;
    }

    //Override Object
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Complex)) {
            return false;
        }
        Complex complex = (Complex) obj;
        if (complex.RealPart != ((Complex) obj).RealPart) {
            return false;
        }
        if (complex.ImagePart != ((Complex) obj).ImagePart) {
            return false;
        }

        return true;
    }

    public String toString() {
        String string = "";
        if (ImagePart > 0)
            string = RealPart + "+" + ImagePart + "i";
        if (ImagePart == 0)
            string = RealPart + "";
        if (ImagePart < 0)
            string = RealPart + " " + ImagePart + "i";
        return string;
    }

    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a) {
        double b = 0, c = 0;
        b = RealPart + a.RealPart;
        c = ImagePart + a.ImagePart;
        System.out.println("(" + RealPart + "+" + ImagePart + "i) + (" + a.RealPart + "+" + a.ImagePart + ") = " + b + "+" + c + "i");
        return new Complex(b, c);
    }

    Complex ComplexSub(Complex a) {
        double b = 0, c = 0;
        b = RealPart - a.RealPart;
        c = ImagePart - a.ImagePart;
        System.out.println("(" + RealPart + "+" + ImagePart + "i) - (" + a.RealPart + "+" + a.ImagePart + ") = " + b + "+" + c + "i");
        return new Complex(b, c);
    }

    Complex ComplexMulti(Complex a) {
        double b = 0, c = 0;
        b = RealPart * a.RealPart;
        c = ImagePart * a.ImagePart;
        System.out.println("(" + RealPart + "+" + ImagePart + "i) * (" + a.RealPart + "+" + a.ImagePart + ") = " + b + "+" + c + "i");
        return new Complex(b, c);
    }

    Complex ComplexDiv(Complex a) {
        if (a.RealPart == 0 || a.ImagePart == 0) {
            System.out.println("被除数不能为0,错误");
            return new Complex();
        }

        double d = Math.sqrt(a.RealPart * a.RealPart) + Math.sqrt(a.ImagePart * a.ImagePart);
        double b = 0, c = 0;
        b = (RealPart * a.RealPart + ImagePart * a.ImagePart) / d;
        c = Math.round((RealPart * a.ImagePart - ImagePart * a.RealPart) / d);
        System.out.println("(" + RealPart + "+" + ImagePart + "i) / (" + a.RealPart + "+" + a.ImagePart + ") = " + b + "+" + c + "i");
        return new Complex(b, c);
    }
}

测试代码

package NBE2;

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

public class ComplexTest extends TestCase {
    Complex complex = new Complex(1, 1);
    @Test
    public void testAdd() {
        assertEquals(new Complex(3.0, 3.0), complex.ComplexAdd(new Complex(2.0, 2.0)));
    }
    @Test
    public void testSub() {
        assertEquals(new Complex(-5.0, -2.0), complex.ComplexSub(new Complex(6.0, 3.0)));
    }
    @Test
    public void testMulti() {
        assertEquals(new Complex(3.0, 2.0), complex.ComplexMulti(new Complex(3.0, 2.0)));
    }
    @Test
    public void testDiv() {
        assertEquals(new Complex(1.0, 1.0), complex.ComplexDiv(new Complex(1.0, 1.0)));
        assertEquals(new Complex(0.0, 0.0), complex.ComplexDiv(new Complex(1.0, 0.0)));
        //边缘测试
    }
}

运行结果截图




(五)UML建模

我的码云仓库地址

三、实验过程中遇到的问题和解决过程

  • 问题1:idea在进行run的时候,一直出现这个窗口,必须对JAVA程序进行配置
  • 问题1解决方案:按照教程重新进行JAVA项目配置,在结构位置进行项目运行就可以了

四、心得体会

  • 在这次实验过程中,我遇到了许多问题,其中既有知识上的漏洞,也有不细心导致的马虎,这一切都补充,完善,丰富,扩展了我的计算机知识体系。在不断修复问题的过程中,我使用了很多方式去查询资料,例如:《数据结构与面向对象程序设计》,博客园平台,CSDN平台,码云平台,知乎app,等。在这个Linux命令行的使用中,我还进一步熟悉了Intellij IDEA这个平台的使用与运行方式,提高了自己自主学习的能力,为我接下来学习数据结构以及JAVA语言程序设计打下了坚实的基础,并在不断探索的过程中逐步提升了自己。

五、参考资料

posted @ 2020-10-13 09:26  20192307常万里  阅读(93)  评论(0编辑  收藏  举报