• 实验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)。

  • 相关阅读:
    英语_词汇_同意辨析
    英语_网站_写作工具
    英语词汇_难词易忘
    IDEA配置技巧 | 去除idea方法形参赋值时的变量提示
    更换Android studio中的SDK和AVD位置
    CSS/CSS3 | P4-选择器优先级权重
    二叉树的性质
    线性表练习
    前插法建立链表
    格式化文件和数据块读写函数
  • 原文地址:https://www.cnblogs.com/yk20192320/p/13803493.html
Copyright © 2020-2023  润新知