zoukankan      html  css  js  c++  java
  • 实验3

    20182320 2019-2020-1 《数据结构与面向对象程序设计》实验3报告

    课程:《程序设计与数据结构》
    班级: 1823
    姓名: 郑力元
    学号:20182320
    实验教师:王志强
    实验日期:2019年9月27日
    必修/选修: 必修

    1.实验内容

    (1)初步掌握单元测试和TDD

    (2)理解并掌握面向对象三要素:封装、继承、多态(自己去学!)

    (3)初步掌握UML建模

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

    2. 实验过程及结果

    2.1 第一个提交点

    首先,参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习,并写出用于检测成绩的类。

    代码如下:

    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测试用例(正常情况,错误情况,边界情况)都通过的截图。

    代码如下:

    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,以TDD的方式研究学习StringBuffer。

    用普通测试方法探究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());
             }
    }
    

    运行结果如下:

    用TDD探究StringBuffer,代码如下:

    import junit.framework.TestCase;
    
    public class StringBufferDemoTest extends TestCase {
        StringBuffer a = new StringBuffer("qwerabcdhij");
        StringBuffer b = new StringBuffer("qwer12345678910");
        StringBuffer c = new StringBuffer("tiyioyuoiyu");
    
        public void testcharAt() throws Exception{
            assertEquals('q',a.charAt(0));
            assertEquals('1',b.charAt(4));
            assertEquals('o',c.charAt(4));
        }
    
        public void testcapacity() throws Exception{
            assertEquals(27,a.capacity());
            assertEquals(31,b.capacity());
            assertEquals(27,c.capacity());
        }
    
        public void testlength() throws Exception{
            assertEquals(11,a.length());
            assertEquals(15,b.length());
            assertEquals(11,c.length());
        }
    
        public void testindexOf() throws Exception{
            assertEquals(0,a.indexOf("qwer"));
            assertEquals(4,b.indexOf("123"));
            assertEquals(5,c.indexOf("yuo"));
        }
    }
    

    运行结果如下:

    2.4第四个提交点

    第一步,用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)
    

    代码如下:

    public class Complex{
        private double RealPart;
        private double ImagePart;
    
            //构造函数
            public Complex(){}
            public Complex(double R,double I){
                RealPart=R;
                ImagePart=I;
            }
    
            //返回
            public double getRealPart(){
            return RealPart;
            }
    
            public double getImagePart(){
            return ImagePart;
            }
    
            //接收
            public void setRealPart(double realPart){
                RealPart=realPart;
            }
    
            public void setImagePart(double imagePart){
                ImagePart=imagePart;
            }
    
            //重写函数toString
            public String toString(){
                return "Complex{" +
                "RealPart=" + RealPart +
                ", ImagePart=" + ImagePart +
                '}';
            }
            public boolean equals(Object a){
                if (a==this){
                    return true;
            }
                else{
                    return false;
            }
            }
    
            // 定义公有方法:加减乘除
            public Complex ComplexAdd(Complex a){
                Complex b = new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
                return b;
            }
            public Complex ComplexSub(Complex a){
                Complex b = new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
                return b;
            }
            public Complex ComplexMulti(Complex a){
                Complex b = new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
                return b;
            }
            public Complex ComplexDiv(Complex a){
                double scale = a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart();
                Complex b = new Complex(a.getRealPart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()),
                - a.getImagePart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()));
                return this.ComplexMulti(b);
            }
    }
    

    第二步,编写测试代码。

    代码如下:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    
    public class ComplexTest extends TestCase {
        Complex a=new Complex(8.0,4.0);
        Complex b=new Complex(-4.0,2.0);
        @Test
        public void testComplexAdd() {
            assertEquals(4.0, a.ComplexAdd(b).getRealPart());
            assertEquals(6.0,a.ComplexAdd(b).getImagePart());
        }
        @Test
        public void testComplexSub() {
            assertEquals(12.0, a.ComplexSub(b).getRealPart());
            assertEquals(2.0,a.ComplexSub(b).getImagePart());
        }
        @Test
        public void testComplexMulti() {System.out.println(a.ComplexMulti(b).getImagePart());
            assertEquals(-40.0, a.ComplexMulti(b).getRealPart());
            assertEquals(0.0,a.ComplexMulti(b).getImagePart());
        }
        @Test
        public void testComplexDiv() {
            assertEquals(-1.2000000000000002, a.ComplexDiv(b).getRealPart());
            assertEquals(-1.6,a.ComplexDiv(b).getImagePart());
        }
    }
    

    结果如下:

    2.5 第五个提交点

    第一步:参考 https://www.cnblogs.com/rocedu/p/4472842.html 中的UML建模规范,对某一自编写的类的代码进行建模。

    编写类的代码如下:

    public class Complex{
        private double RealPart;
        private double ImagePart;
    
            //构造函数
            public Complex(){}
            public Complex(double R,double I){
                RealPart=R;
                ImagePart=I;
            }
    
            //返回
            public double getRealPart(){
            return RealPart;
            }
    
            public double getImagePart(){
            return ImagePart;
            }
    
            //接收
            public void setRealPart(double realPart){
                RealPart=realPart;
            }
    
            public void setImagePart(double imagePart){
                ImagePart=imagePart;
            }
    
            //重写函数toString
            public String toString(){
                return "Complex{" +
                "RealPart=" + RealPart +
                ", ImagePart=" + ImagePart +
                '}';
            }
            public boolean equals(Object a){
                if (a==this){
                    return true;
            }
                else{
                    return false;
            }
            }
    
            // 定义公有方法:加减乘除
            public Complex ComplexAdd(Complex a){
                Complex b = new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
                return b;
            }
            public Complex ComplexSub(Complex a){
                Complex b = new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
                return b;
            }
            public Complex ComplexMulti(Complex a){
                Complex b = new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
                return b;
            }
            public Complex ComplexDiv(Complex a){
                double scale = a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart();
                Complex b = new Complex(a.getRealPart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()),
                - a.getImagePart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()));
                return this.ComplexMulti(b);
            }
    }
    

    测试代码如下:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    
    public class ComplexTest extends TestCase {
        Complex a=new Complex(8.0,4.0);
        Complex b=new Complex(-4.0,2.0);
        @Test
        public void testComplexAdd() {
            assertEquals(4.0, a.ComplexAdd(b).getRealPart());
            assertEquals(6.0,a.ComplexAdd(b).getImagePart());
        }
        @Test
        public void testComplexSub() {
            assertEquals(12.0, a.ComplexSub(b).getRealPart());
            assertEquals(2.0,a.ComplexSub(b).getImagePart());
        }
        @Test
        public void testComplexMulti() {System.out.println(a.ComplexMulti(b).getImagePart());
            assertEquals(-40.0, a.ComplexMulti(b).getRealPart());
            assertEquals(0.0,a.ComplexMulti(b).getImagePart());
        }
        @Test
        public void testComplexDiv() {
            assertEquals(-1.2000000000000002, a.ComplexDiv(b).getRealPart());
            assertEquals(-1.6,a.ComplexDiv(b).getImagePart());
        }
    }
    

    根据以上代码建模,图如下:

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

    在使用IDEA的Git功能时,遇到许多困难与阻碍,并且由于当时解决问题心情急切,没有截图。

    • 问题1:在使用Git上传代码的时候,右下角弹窗提示上传被拒绝。目前原因未知。
    • 问题1解决方案:
      首先,将本地的代码库删除并提前备份代码。

    其次,将码云上的代码重新clone至本地。

    最后,将备份好的代码复制到本地的库中,再一起上传。

    • 问题2:在使用IDEA时,环境设置比较复杂,很多配置需要手动设置,例如生成.class文件的路径、手动设置源代码文件夹和测试文件夹等等。
    • 问题2解决方案:参考 https://www.cnblogs.com/rocedu/p/4472842.html ,但是有许多图片无法加载,所提供的帮助有限。

    其他(感悟、思考等)

    虽然集成开发环境IDEA很强大,但是它的强大建立在我们熟练运用的基础上。因此我们要认真阅读IDEA的使用教程,充分利用它的优势为我们编写代码提供便利。

    参考资料

  • 相关阅读:
    Struts学习注册与登录
    AJAX练习
    多线程下WinForm开发应该注意哪些问题?
    .NET下跨线程访问Control。
    配置IIS使用ASP.NET 2.0
    让你的Firefox使用Google.CN进行搜索
    Live Messenger 邀请,再次放送
    也谈博客园的商业化
    【点滴】向Sql Express数据库文件中注册Asp.NET 2.0用户管理模块
    Re: EnterLib ObjectBuild vs Castle WindsorContainer, part 1
  • 原文地址:https://www.cnblogs.com/leonzheng/p/11602196.html
Copyright © 2011-2022 走看看