• 20165329 Java实验二:面向对象编程


    实验内容:

    面向对象程序设计-1

    实验要求:

    提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图

    实验步骤:

    1.按照老师博客的要求新建一个MyUtil项目

    在src内新建java class

    输入如下代码:

    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 "错误";
    }
    }  
    

    2.新建一个test文件夹,标注为test source

    在MyUtil类名处create test

    输入如下代码:

    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 testException() {
        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));
    }
    }
    
    test运行结果如下:
    

    面向对象程序设计-2

    实验要求:

    以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

    实验步骤:

    1.学习有关StringBuffer的相关知识

    StringBuffer append() 向字符串缓冲区追加元素
    StringBuffer charAt() 返回此序列中指定索引处的 char 值
    StringBuffer capacity() 得到缓冲区分配的总容量
    StringBuffer indexOf() 返回当前StringBuffer对象中,第一个满足str子串的位置
    StringBuffer toString( ) 返回此序列中数据的字符串表示形式
    StringBuffer length() 得到当前StringBuffer的长度
    length 与 capacity 的区别:分配的容量与实际的长度
    

    2.按照老师博客中的要求,新建一个 StringBufferDemo项目
    在src内新建一个java class
    输入如下代码:

        public class StringBufferDemo{
        public static void main(String [] args){
              StringBuffer buffer = new StringBuffer();
              buffer.append('S');
              buffer.append("tringBuffer12345");
             System.out.println(buffer.charAt(1));
             System.out.println(buffer.capacity());
             System.out.println(buffer.indexOf("tringBuffer12345"));
             System.out.println("buffer = " + buffer.toString());
             System.out.println(buffer.length());
          }
    }
    

    3.创建一个test文件夹,标注为test source
    新建一个test java class
    输入如下代码:

    import org.junit.Test;
    import junit.framework.TestCase;
    public class StringBufferDemoTest extends TestCase {
        StringBuffer sq = new StringBuffer("gst and sq");
        StringBuffer gst = new StringBuffer("sq and gst lueluelue hahaha");
    public void testcharat() {
        assertEquals('g', sq.charAt(0));
        assertEquals('s', gst.charAt(0));
    }
    public void testcapacity() {
        assertEquals(26, sq.capacity());
        assertEquals(43, gst.capacity());
    }
    public void testlength() {
        assertEquals(10, sq.length());
        assertEquals(27, gst.length());
    }
    public void testindexof() {
        assertEquals(0, sq.indexOf("gst"));
        assertEquals(11, gst.indexOf("lue"));
    }
    }
    
    运行结果:
    ![](https://images2018.cnblogs.com/blog/1296864/201804/1296864-20180416095342534-2087470503.png)
    

    面向对象程序设计-3

    实验要求:

    参考http://www.cnblogs.com/rocedu/p/6736847.html

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

    用自己的学号%6进行取余运算,根据结果进行代码扩充:

    4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    实验步骤:

    创建项目等一系列操作同上

    输入的src内代码为:

    abstract class Data {
        abstract public void DisplayValue();
            }
        class Integer extends  Data {
        int value;
        Integer() {
        value=100;
        }
        public void DisplayValue(){
        System.out.println (value);
        }
    }
    class Floater extends  Data {
        float value;
    Floater() {
        value=5320;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
    }
    abstract class Factory {
        abstract public Data CreateDataObject();
    }
    class IntFactory extends Factory {
        public Data CreateDataObject(){
            return new Integer();
    }
    }
    class FloatFactory extends Factory {
        public Data CreateDataObject(){
            return new Floater();
    }
    }
    class Document {
        Data pd;
        Document(Factory pf){
            pd = pf.CreateDataObject();
    }
    public void DisplayData(){
        pd.DisplayValue();
    }
    }
    public class MyDoc {
        static Document d;
        public static void main(String[] args) {
            d = new Document(new FloatFactory());
            d.DisplayData();
        }
    }
    
    运行截图:
    

    面向对象程序设计-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)
    

    实验步骤:

    新建项目,src内新建java class

    输入如下代码:

    import java.util.Objects;
    
    import static java.lang.Math.sqrt;
    import static java.lang.StrictMath.round;
    
    public class Fushu {
    public static void main (String args[]){
        Complex sq = new Complex(1.0,4.0);
        Complex gst = new Complex(1.0,3.0);
    }
    static class Complex{
        double x;
        double y;
        Complex(double x,double y){
            this.x=x;
            this.y=y;
        }
        Complex ComplexAdd(Complex a){
            return new Complex(x+a.x,y+a.y );
        }
        Complex ComplexSub(Complex a){
            return new Complex(x-a.x,y-a.y );
        }
        Complex ComplexMulti(Complex a){
            return new Complex(x*a.x-y*a.y,x*a.y+y*a.x);
        }
        Complex ComplexDiv(Complex a){
            double g = sqrt(a.x*a.x)+sqrt(a.y*a.y);
            double s = (x*a.y-y*a.x);
                    return new Complex ((x*a.x)+(y*a.y)/g,round(s/g));
        }
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Complex complex = (Complex) o;
            return Double.compare(complex.x, x) == 0 &&
                    Double.compare(complex.y, y) == 0;
        }
        @Override
        public String toString() {
    
            if (y > 0) {
                return "("+x+"+"+y+"i"+")";
            }
            else
            {
                return "("+x+"-"+y+"i"+")";
            }
        }
    }
    }
    

    在test文件目录下新建class

    输入代码如下:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    public class FushuTest extends TestCase {
    Fushu.Complex sq = new Fushu.Complex(1.0, 4.0);
    Fushu.Complex gst = new Fushu.Complex(1.0, 3.0);
    @Test
    public void testAdd() {
        assertEquals("(2.0+7.0i)", sq.ComplexAdd(gst).toString());
    }
    
    @Test
    public void testSub() {
        assertEquals("(0.0+1.0i)", sq.ComplexSub(gst).toString());
    }
    
    @Test
    public void testMul() {
        assertEquals("(-11.0+7.0i)", sq.ComplexMulti(gst).toString());
    }
    
    @Test
    public void testDiv() {
        assertEquals("(4.0-0.0i)", sq.ComplexDiv(gst).toString());
    }
    }
    

    运行截图:

    实验中遇到的问题

    一、在IDEA中按照博客步骤找不到Generator,并且之后出现安装失败

    解决方法:在setting中直接搜索Generator2.0安装

    二、老师的博客中SringBufferDeo类里面测试理论与实际不符

    解决办法:在append()中加入12345

    三、单元测试时出现test not found错误

    解决方法:测试类中类名不能大写,改成小写即可

    实验PSP:

    步骤 耗时 百分比
    需求分析 30m 16%
    设计 60m 33%
    实现 30m 16%
    测试 20m 11%
    分析总结 40m 22%
  • 相关阅读:
    shell中的 echo命令
    shell中的运算符
    shell中的替换
    shell中的元字符
    springcloud-sleuth的使用
    springcloud-sleuth之zipkun运行和概念介绍
    springcloud-sleuth是什么
    消息总线(bus)和消息驱动(stream)的区别
    springcloud-stream之持久化
    springcloud-stream之消费者重复消费
  • 原文地址:https://www.cnblogs.com/Gst-Paul/p/8854213.html
Copyright © 2020-2023  润新知