學號 20172328 《程序設計與數據結構》實驗二報告

學號 20172328 《程序設計與數據結構》實驗二報告

課程:《程序設計與數據結構》
班級: 1723
姓名: 李馨雨
學號:20172328
實驗教師:王志強
實驗日期:2018年4月17~30日
必修/選修: 必修java

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程序設計與數據結構教程(第二版)》學習指導

相關文章
相關標籤/搜索