实验3

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

课程:《程序设计与数据结构》
班级: 1923
姓名: 杨坤
学号:20192320
实验教师:王自强
实验日期:2020年10月8日
必修/选修: 必修

1.实验内容

参考《实验二 Java面向对象程序设计》:http://www.cnblogs.com/rocedu/p/6736847.html
实验内容

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

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

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

  3. 初步掌握UML建模

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

2. 实验过程及结果

1.Java编程的学习 《积极主动敲代码,使用JUnit学习Java》给出了学习方法。其中提到的JUnit就是Java单元测试工具。

public class MyUtil{
   public static String percentage2fivegrade(int grade){
	   //如果成绩小于60,转成“不及格”
	   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 "优秀";
	   //其他,转成“错误”
	   else 
		   return "错误";
   }
}

2.以 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();
        System.out.println(buffer.indexOf("tring"));
        System.out.println("buffer= "+ buffer.toString());
        System.out.println(buffer.length());

    }
}
import org.junit.Test;

import static org.junit.Assert.assertEquals;


public class StringBufferDemoTest {
    StringBuffer a=new StringBuffer("iamyk");
    StringBuffer b=new StringBuffer("iamykiamaman");
    StringBuffer c=new StringBuffer("iamykiamamaniam");



    @Test
    public void testchatAt()
    {
            assertEquals('i',a.charAt(0));
            assertEquals('m',a.charAt(2));
            assertEquals('k',a.charAt(4));
    }

    @Test
    public void testlentgh()
    {
        assertEquals(5,a.length());
        assertEquals(12,b.length());
        assertEquals(15,c.length());

    }
    @Test
    public void testindexOf()
    {
        assertEquals(1,a.indexOf("am"));
        assertEquals(4,b.indexOf("kiam"));
    }

}

3.对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

// Server Classes
    abstract class Data {
        abstract public void DisplayValue();
    }
    class Integer extends Data {
        boolean value1;
        int value2;
        Integer() {
            value1 =true;
            value2 =100;
        }
        public void DisplayValue(){
            System.out.println (value1);
            System.out.println(value2);
        }
    }
    // Pattern Classes
    abstract class Factory {
        abstract public Data CreateDataObject();
    }
    class BooleanIntFactory extends Factory {
        public Data CreateDataObject(){
            return new Integer();
        }
    }
    //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 BooleanIntFactory());
            d.DisplayData();
        }

    }

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

// 定义属性并生成getter,setter
double RealPart;
double ImagePart;

import java.util.Scanner;

public class ComplexNumber {

    double Realpart;
    double Imagepart;



    public double getRealpart() {
        return Realpart;
    }

    public double getImagepart() {
        return Imagepart;
    }

    public void setRealpart(double realpart) {
        Realpart = realpart;
    }

    public void setImagepart(double imagepart) {
        Imagepart = imagepart;
    }

    public ComplexNumber() {
    }

    public ComplexNumber(double R, double I) {
        Realpart = R;
        Imagepart = I;
    }



    public static ComplexNumber add(ComplexNumber a, ComplexNumber b) {
        ComplexNumber temp = new ComplexNumber();
        temp.Realpart = a.Realpart + b.Realpart;
        temp.Imagepart = a.Imagepart + b.Imagepart;
        return temp;
    }

    public static ComplexNumber sub(ComplexNumber a, ComplexNumber b) {
        ComplexNumber temp = new ComplexNumber();
        temp.Realpart = a.Realpart - b.Realpart;
        temp.Imagepart = a.Imagepart - b.Imagepart;
        return temp;
    }

    public static ComplexNumber multi(ComplexNumber a, ComplexNumber b) {
        ComplexNumber temp = new ComplexNumber();
        temp.Realpart = a.Realpart * b.Realpart - a.Imagepart * b.Imagepart;
        temp.Imagepart = a.Realpart * b.Imagepart + a.Imagepart * b.Realpart;
        return temp;
    }

    public static ComplexNumber div(ComplexNumber a, ComplexNumber b) {
        ComplexNumber temp = new ComplexNumber();
        double t = Math.pow(b.Realpart, 2) + Math.pow(b.Imagepart, 2);
        temp.Realpart = (a.Realpart * b.Realpart + a.Imagepart * b.Imagepart) / t;
        temp.Imagepart = (a.Imagepart * b.Realpart - a.Realpart * b.Imagepart) / t;
        return temp;
    }

    public static void main(String[] args) {
     ComplexNumber a=new ComplexNumber();
     ComplexNumber b=new ComplexNumber();
     ComplexNumber result=new ComplexNumber();

     String operate;
     Scanner scan=new Scanner(System.in);
        System.out.println("input the a ");
        a.Realpart=scan.nextDouble();
        a.Imagepart=scan.nextDouble();
        System.out.println(a.Realpart+"+"+"("+a.Imagepart+"i"+")");
        System.out.println("choose the operate: ");
        operate=scan.next();
        System.out.println("input the b ");
        b.Realpart=scan.nextDouble();
        b.Imagepart=scan.nextDouble();
        System.out.println(b.Realpart+"+"+"("+b.Imagepart+"i"+")");
        if(operate.equals("+"))
     {
       result=add(a,b);
     }
    else if(operate.equals("-"))
     {
          result=sub(a,b);
    }
     else if(operate.equals("*"))
     {
         result=multi(a,b);
     }
     else if(operate.equals("/"))
        { result=div(a,b);}
        System.out.println(a.Realpart+"+"+"("+a.Imagepart+"i"+")"+operate+b.Realpart+"+"+"("+b.Imagepart+"i"+")"+"=="+result.Realpart+"+"+"("+result.Imagepart+"i"+")");

}



}
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class ComplexNumberTest {
    ComplexNumber a = new ComplexNumber(1.0, 2.0);
    ComplexNumber b = new ComplexNumber(1.0, -4.0);
    ComplexNumber c = new ComplexNumber(19.0, 0.0);
    ComplexNumber d = new ComplexNumber(0.0, -3.0);
    ComplexNumber e = new ComplexNumber(0.0, 0.0);



    @Test
    public void testadd() {
        assertEquals(2.0d, ComplexNumber.add(a, b).Realpart,1d);
    }

    @Test
    public void testsub() {
        assertEquals(18.0d, ComplexNumber.sub(c, b).Realpart,1d);
    }

    @Test
    public void testmulti() {
        assertEquals(-57.0d, ComplexNumber.multi(c, d).Imagepart, 1d);
    }

}

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

类图中只少两个类。

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

  • 问题1:对于一开始junit的设置出现没有讲解的毛病
  • 问题1解决方案:百度。
  • 问题2:不理解多态的问题
  • 问题2的解决方法:询问表哥,在他的讲解下,理解了多态以及继承的部分内容,剩下的百度。

其他(感悟、思考等)

还是要多加练习,不然会手生!要提前预习看书,平时多敲代码,对于书上的代码,要能都敲一遍,对于不理解、不懂得地方,多向老师同学询问。

参考资料

参考《实验二 Java面向对象程序设计》:http://www.cnblogs.com/rocedu/p/6736847.html
实验内容

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

原文地址:https://www.cnblogs.com/yk20192320/p/13803493.html