zoukankan      html  css  js  c++  java
  • 2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告

    一、实验报告封面

      • 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126
      • 指导教师:娄嘉鹏 实验日期:2019年4月17日
      • 实验时间:--- 实验序号:实验二
      • 实验名称:Java开发环境的熟悉
      • 实验题目:
      • 实验要求:
        • 完成实验二《Java面向对象程序设计》中的内容
        • 其中Eclipse相关的内容参考Intellj IDEA 简易教程换成IDEA实现
        • 参考实验二《Java面向对象程序设计》的一点说明,完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
        • 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验二《Java面向对象程序设计》实验报告”

    二、实验内容

    (一)单元测试

      (1) 三种代码: 伪代码、产品代码、测试代码。
      伪代码与具体编程语言无关,伪代码从意图层面来解决问题,最终,伪代码是产品代码最自然的、最好的注释。

    • 伪代码:

    百分制转五分制:
    如果成绩小于60,转成“不及格”
    如果成绩在60与70之间,转成“及格”
    如果成绩在70与80之间,转成“中等”
    如果成绩在80与90之间,转成“良好”
    如果成绩在90与100之间,转成“优秀”
    其他,转成“错误”
    
    
    • 产品代码:

    • public class MyUtil {
          public static String percentage2fivegrade(int grade) {
              if (grade < 0)
                  return "错误";
              else if(grade<60){
                  return "不及格";
              }
              else if(grade<70){
                  return "及格";
              }
              else if(grade<80){
                  return "中等";
              }
              else if (grade<90){
                  return "良好";
              }
              else if (grade<=100){
                  return "优秀";
              }
              else
                  return "错误";
          }
      }
    • 测试代码:

    • 测试代码:
      import junit.framework.TestCase;
      import org.junit.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 testException(){
              assertEquals("错误",MyUtil.percentage2fivegrade(-55));
              assertEquals("错误",MyUtil.percentage2fivegrade(115));
          }
          @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));
          }
      }
    • 具体流程:在IDEA中打开一个项目,并打开其测试项,插入代码

    • 但是一般刚插进去的时候,test部分会是红色的,这需要我们先插入Junit包:

    • 首先用everthing找到junit.jar的位置:

    • 然后插入junit.jar:

    • 接下来根据要求补充完整后,运行,看是否结果符合预期。

    • 最终运行测试图:

     

    (二)TDD(Test Driven Devlopment, 测试驱动开发)

    • 一般步骤
      • 明确当前要完成的功能,记录成一个测试列表
      • 快速完成编写针对此功能的测试用例
      • 测试代码编译不通过(没产品代码呢)
      • 编写产品代码
      • 测试通过
      • 对代码进行重构,并保证测试通过(重构下次实验练习)
      • 循环完成所有功能的开发
    • 产品代码

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

    import junit.framework.TestCase;
    import org.junit.Test;
    
    public class StringBufferDemoTest extends TestCase {
        StringBuffer a = new StringBuffer("StringBuffer");
        StringBuffer b = new StringBuffer("StringBufferStringBuffer");
        StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
        @Test
        public void testcapacity() throws Exception{
            assertEquals(28,a.capacity());
            assertEquals(40,b.capacity());
            assertEquals(52,c.capacity());
        }
        @Test
        public void testcharAt() throws Exception{
            assertEquals('S',a.charAt(0));
            assertEquals('g',a.charAt(5));
            assertEquals('r',a.charAt(11));
        }
        @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(7,a.indexOf("uff"));
        }
    
    }
    • 照例,创建好StringBufferDemo.java后,创建一个test:

    • 测试结果运行图:

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

    • 产品代码

      abstract class Data{
          public abstract void DisplayValue();
      }
      class Integer extends Data {
          int value;
          Integer(){
              value=100;
          }
          public void DisplayValue(){
              System.out.println(value);
          }
      }
      class Boolean extends  Data {
          boolean value;
          Boolean() {
              value=true;
          }
          public void DisplayValue(){
              System.out.println (value);
          }
      }
      class Document {
          Data pd,qw;
          Document() {
              pd=new Integer();
              qw=new Boolean();
          }
          public void DisplayData(){
              pd.DisplayValue();
              qw.DisplayValue();
          }
      }
      public class MyDoc {
          static Document d;
          public static void main(String[] args) {
              d = new Document();
              d.DisplayData();
          }
      }
    • 首先我们根据要求算一下自己应该做第几题:26%2=2,所以做第二题:

    • 2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    • 要想输出Boolean,就必须要先添加一个Boolean的小类,可以依葫芦画瓢,根据上面Integer的内容写出Boolean的代码:

    • 最后再在输出的Document类上加上刚才增加的内容:

    • class Document {
          Data pd,qw;
          Document() {
              pd=new Integer();
              qw=new Boolean();
          }
          public void DisplayData(){
              pd.DisplayValue();
              qw.DisplayValue();
          }
      }
      

        

    • 最终运行结果图,符合预期:

     

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

    • 产品代码

      import static java.lang.Math.sqrt;
      
      public class MyComplex {
              double realpart,imagepart;
              public MyComplex(double R,double I){
                  realpart=R;
                  imagepart=I;
              }
              public double getRealPart(){
                   return realpart;
              }
              public double getImagePart(){
                  return imagepart;
              }
              public MyComplex Complexjiafa(MyComplex a){
                  return new MyComplex((realpart+a.realpart),imagepart+a.imagepart);
              }
               public MyComplex Complexjianfa(MyComplex a){
              return new MyComplex((realpart-a.realpart),imagepart-a.imagepart);
               }
               public MyComplex Complexchengfa(MyComplex a){
              return new MyComplex((realpart*a.realpart-imagepart*a.imagepart),realpart*a.imagepart+imagepart*a.realpart);
               }
               public MyComplex Complexchufa(MyComplex a){
                  double d = sqrt(a.realpart*a.realpart)+sqrt(a.imagepart*a.imagepart);
                  double e = (realpart*a.imagepart-imagepart*a.realpart);
              return new MyComplex((realpart*a.realpart+imagepart*a.imagepart)/d,imagepart/a.imagepart);
          }
              public static void main(String args[]){
                  MyComplex w = new MyComplex(2,10);
                  MyComplex e = new MyComplex(1,3);
                  MyComplex a = new MyComplex(4,5);
                  MyComplex b = new MyComplex(3,7);
                  a.Complexjiafa(b);
                  System.out.println("("+a.realpart+"+"+a.imagepart+"i)+("+b.realpart+"+"+b.imagepart+"i)="+a.Complexjiafa(b).realpart+"+"+a.Complexjiafa(b).imagepart+"i");
                  System.out.println("("+a.realpart+"+"+a.imagepart+"i)-("+e.realpart+"+"+e.imagepart+"i)="+a.Complexjianfa(e).realpart+"+"+a.Complexjianfa(e).imagepart+"i");
                  System.out.println("("+a.realpart+"+"+a.imagepart+"i)*("+b.realpart+"+"+b.imagepart+"i)="+a.Complexchengfa(b).realpart+"+"+a.Complexchengfa(b).imagepart+"i");
                  System.out.println("("+a.realpart+"+"+a.imagepart+"i)/("+w.realpart+"+"+w.imagepart+"i)="+a.Complexchufa(w).realpart+"+"+a.Complexchufa(w).imagepart+"i");
              }
      
          }
    • 测试代码

    • import junit.framework.TestCase;
      import org.junit.Test;
      
      public class MyComplexTest extends TestCase {
          MyComplex a = new MyComplex(4,5);
          MyComplex b = new MyComplex(3,7);
          MyComplex c = new MyComplex(2.7,9.5);
          MyComplex d = new MyComplex(8,2.1);
          MyComplex e = new MyComplex(8,15);
          @Test
          public void testgetRealPart() throws Exception {
              assertEquals(4.0,a.getRealPart());
              assertEquals(2.7,c.getRealPart());
          }
          @Test
          public void testgetImagePart()throws Exception{
              assertEquals(7.0,b.getImagePart());
              assertEquals(2.1,d.getImagePart());
          }
          @Test
          public void testComplexjiafa()throws Exception{
              assertEquals(7.0,a.Complexjiafa(b).realpart);
              assertEquals(11.6,c.Complexjiafa(d).imagepart);
          }
          @Test
          public void testComplexjianfa()throws Exception{
              assertEquals(1.0,a.Complexjianfa(b).realpart);
              assertEquals(7.4,c.Complexjianfa(d).imagepart);
          }
          @Test
          public void testComplexchengfa()throws Exception{
              assertEquals(-23.0,a.Complexchengfa(b).realpart);
              assertEquals(81.67,c.Complexchengfa(d).imagepart);
          }
          @Test
          public void testComplexchufa()throws Exception{
              assertEquals(2.0,e.Complexchufa(a).realpart);
              assertEquals(3.0,e.Complexchufa(a).imagepart);
          }
      }
      

        

    • 首先思路是,要有一个定义复数的函数,即有实数部,和虚数部:

    • 再设计一个,返回实数部和返回虚数部的函数:

    • 最后再依次设计加减乘除的算法:

    • 最后再增加一个test对其进行测试,看是否符合预期:

    • 测试图:

    (五)任务五:使用StarUML对实验二中的代码进行建模

    • UML图:

     

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

    问题1:添加junit.jar包后还是找不到文件test

    问题1解决办法:

    上网百度了一下,只要再将Junit-4.12.jar添加进去即可

    问题2:在test的时候出现看不懂的英文错误

    问题2解决办法:

    百度了一下,test部分的名称必须为主程序里有的类,且首字母必须为小写。

     

    问题3:出现错误:无法从静态上下文中引用上文方法

    问题3解决办法:

    使用getRealPart()函数的方法错误,应改为所定义的函数方式。

    四、实验体会

            本次实验我感觉难度很大,在做实验的时候,也在不停的百度,看能否解决自己的问题,虽然很累但收获也很多,并且也学会了UNL图的制作办法。

    五、参考资料

  • 相关阅读:
    第几天?
    比较 String,StringBuffer,StringBuilder
    Elasticsearch中一些重要概念
    Elasticsearch 中的 Bucket
    Elasticsearch的倒排索引
    配置SSL、TLS以及HTTPS来确保es、kibana、beats、logstash的安全
    ELK集群设置X-pack密码
    logstash启动时找不到自定义的JAVA_HOME环境变量
    elasticsearch启动时使用自带的JAVA版本
    ES破解x-pack
  • 原文地址:https://www.cnblogs.com/apollooo/p/10726359.html
Copyright © 2011-2022 走看看