一、实验报告封面

    • 课程: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图的制作办法。

五、参考资料

2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告的更多相关文章

  1. 20145239杜文超 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145239 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

  2. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  4. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  5. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  7. 实验二 Java面向对象程序设计实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  8. 20145326《Java程序设计》实验二Java面向对象程序设计实验报告

    20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  9. 20155217 实验二 Java面向对象程序设计 实验报告

    20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...

  10. 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

随机推荐

  1. [UE4]虚幻引擎的C++环境安装

    一.一般使用VS2017开发 二.需要勾选“使用C++的游戏开发”

  2. qnx spi 学习笔记

    文档还在编辑中,目前排版很乱,边看边写..等写完了编辑 qnx spi 学习  --目前只是看了代码,学的不深入,有错误的地方请联系我 谢谢 spi init spi init应该是分为2条线,一条是 ...

  3. 集成学习(ensemble learning)

    集成学习,又称为“多分类器系统”(multi-classifier system).“基于委员会的学习”(committee-based learning)等.基本的想法是结合多个学习器,获得比单一学 ...

  4. spark2.1源码分析4:spark-network-common模块的设计原理

    spark-network-common模块底层使用netty作为通讯框架,可以实现rpc消息.数据块和数据流的传输. Message类图: 所有request消息都是RequestMessage的子 ...

  5. C#开发微信支付之企业向用户付款

    1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如 ...

  6. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  7. Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView

    目标需求 实现一张小图片,被点击后变成一个在整个屏幕上显示的大图片.类似于微信朋友圈的图片. 实现流程 1.Fresco基本初始化 2.下载并且导入ZoomableDraweeView 它是实现大图的 ...

  8. 【perl】simpleHTTP

    类似Python SimpleHTTPServer #!/usr/bin/perl # https://metacpan.org/pod/HTTP::Server::Simple # https:// ...

  9. Django建站+Vuejs前端

    第一节 @注意 千万注意格式.标签名字: 浏览器开发者模式修改页面不显示:在开发者模式下(F12进入),打开设置页面(F1),勾选 Disable cache (while DevTools is o ...

  10. linux下使用nmon工具对服务器性能进行检测

    1.nmon工具介绍: nmon工具是linux系统下可以对服务器及系统性能进行监测,CPU信息.CPU占用.内存使用.网卡使用等.最大的好处是此工具会将结果以列表的形式或者是模拟图形化的方式展示,不 ...