zoukankan      html  css  js  c++  java
  • 学号 20172328 《程序设计与数据结构》实验二报告

    学号 20172328 《程序设计与数据结构》实验二报告

    课程:《程序设计与数据结构》
    班级: 1723
    姓名: 李馨雨
    学号:20172328
    实验教师:王志强
    实验日期:2018年4月17~30日
    必修/选修: 必修

    1.实验内容

    • 初步掌握单元测试和TDD

    • 理解并掌握面向对象三要素:封装、继承、多态

    • 初步掌握UML建模

    • 熟悉S.O.L.I.D原则

    • 了解设计模式

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

    2.实验过程及结果
    码云链接

    • 第一个提交点

      • 考查JUnit会不会使用,测试用例要包含正常情况,错误情况,边界情况的测试 。
    • 第二个提交点

      • 以 TDD的方式研究学习StringBuffer
        ,测试自己会不会写JUnit测试用例。
    • 第三个提交点

      • 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式。让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印。
    • 第四个提交点

      • 以TDD的方式开发一个复数类Complex。
    • 第五个提交点

      • 使用StarUML对实验二中的代码进行建模,类图中至少包含两个类。

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

    问题1:StringBuilder、StringBuffer、String类之间的关系
    问题1解决方案:

    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似。

    1. String 类
      String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 String a = "a"; //假设a指向地址0x0001
      a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
      因此String的操作都是改变赋值地址而不是改变值操作。

    2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

    StringBuffer buf=new StringBuffer(16); //分配长16字节的字符缓冲区
    StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
    StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

    3.StringBuffer
      StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。
    问题2:多线程和单线程的概念
    问题2解决方案:

    • 多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行程序。
    • 单线程:线程是程序中的一个执行流,每个线程都有自己专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
      问题3:编写Complex后进行测试驱动Complextest时出现的问题。

    问题3解决方案:这个问题一直不知道是自己哪里错误。后来经同学帮助,是前面Complex类中编写错误,形式参数中变量a的实部和虚部不能直接调用,应该用我之前写在前面的get方法去调用具体值。(不好意思,忘记截图)
    问题4:在做第三个提交点问题时,有一个小错误。一直红线提示。
    问题4解决方案:后来发现是浮点数程序系统默认double,所以float型在后面初始化时应该用数值f

    其他(感悟、思考等)

    我的实验二中的几个实验做的有点吃力,但是还是收获了很多。尤其是测试驱动开发(TDD),直接提供了一种很好用的方法去测试编写的程序是否有些纰漏,之前用命令行的时候总是找编译类错误和语法错误,现在可以具体系统的去找编程中的逻辑错误,所以junit是一种对程序员很实用的工具。

    参考资料

    1.全面解释java中StringBuilder、StringBuffer、String类之间的关系

    2.《Java程序设计与数据结构教程(第二版)》学习指导

  • 相关阅读:
    D. Minimax Problem
    Codeforces Round #592 (Div. 2) D,E
    Codeforces Round #587 (Div. 2) C
    Codeforces Round #587 (Div. 3) E
    Educational Codeforces Round 73 (Rated for Div. 2)
    HDU1247(Hat’s Words)
    HDU1251(统计难题)(字典树模板题
    HDU1525(Euclid's Game)规律博弈
    Find the answer
    Fansblog
  • 原文地址:https://www.cnblogs.com/LXY462283007/p/8934630.html
Copyright © 2011-2022 走看看