1. 程式人生 > 其它 >20202317向巖傑 2020-2021-2《資料結構與面向物件程式設計》課程總結

20202317向巖傑 2020-2021-2《資料結構與面向物件程式設計》課程總結

20202317向巖傑 2020-2021-2《資料結構與面向物件程式設計》課程總結

  • 課程內容總結

  1. 第一章
    • 簡要內容

     基於命令列進行簡單的Java程式編輯、編譯、執行和除錯。

     練習Linux基本命令。

     學習Java程式的JDB除錯技能:https://www.cnblogs.com/rocedu/p/6371262.html。

     編寫簡單的Java程式。

    • 遇到的問題

    - 問題1:首先是在使用linux和vim編輯器的時候,由於是第一次使用這種方式作業系統,特別是對於我這種打字都有點費力的人來說,的確是一個比較大的難題。vim編輯器的使用顯得手忙腳亂,剛開始估計都是這樣的。
    - 問題1解決方案:這個東西的解決方法,好像也沒啥特別的解決方法,自己有在嘗試做一些題目,像在csdn上找了一些基礎的練習題,單純是為了練熟程式碼格式還有就是練手速。
    - 問題2:在安裝jdk的時候出現了比較麻煩的事情,主要集中在安裝Opera Jdk的時候,可能是由於先已經安裝了openjdk的原因,在按照步驟裝完opera jdk的時候,java -version仍然只顯示openjdk。
    - 問題2解決方案:後來從老師那裡知道了其實openjdk對於我們的學習已經夠用了。

    • 心得體會

     還記得編寫的第一個經典程式“hello World”。從那時起我已開始走進Java的世界。當時自己不是很理解為什麼main方法一定要這樣來定義public static void main(String[] args),能不能不-這樣寫?問了好多同學,他們告訴我的答案是一樣的“java本身要求就是這樣子的”,就像之前學C的時候,一定是#include開頭後跟int main(),學習一門計算機語言的一般都是這樣,先模仿,再鑽研。特別是在vim編輯器的使用顯得手忙腳亂,剛開始估計都是這樣的。後來自己查資料,在csdn上找到了好多我能看得懂的參考資料。接下來的學習中還是要多練習,要跟上老師的教學進度。同時也不能只是簡簡單單的滿足於Java的學習,要利用大二的時間多開拓視野,儘可能多學習新東西。

   2.第二章

    • 簡要內容

    (1) 編寫簡單的計算器,完成加減乘除模運算。
    (2) 要求從鍵盤輸入兩個數,使用判定語句選擇一種操作,計算結果後輸出,然後使用判定和迴圈語句選擇繼續計算還是退出。
    (3) 編寫測試程式碼,測試驗證。(https://www.cnblogs.com/rocedu/p/4472842.html)

    • 遇到的問題

    - 問題1:首先是對於構造方法過程稍微難以理解
    - 問題1解決方案:將C語言的函式和構造方法類比就好理解多了
    - 問題2:第一個計算器的輸入體驗不像一個計算器,所以想換一種寫法
    - 問題2解決方案:多加一個迴圈用來定位符號,由於是兩個數所以比較容易分割整個字串但是也有缺點,就是如果想增加更多的計算種類比如科學計算器就比較麻煩。

    • 心得體會

     這次實驗主要是強化了迴圈,對於構造方法的練習還不夠。但是在想第二種方法的時候基本上Java的迴圈於c語言沒啥區別,而且方法使得部分操作更加簡單了,比如如果要將c語言中的一個字串拆解可能十分麻煩,所以用c語言寫計算器基本上就不會想到這種方法。但是第二種寫的還是很麻煩,水平有限,暫時可能優化不了嘿嘿嘿。對於類與物件和構造方法的認識還不夠,對於類、物件、方法之間的關係還差一些理解。之後會繼續努力。

    3.第三章

    • 簡要內容

      下載安裝並使用IDEA,完成下面實驗(https://www.cnblogs.com/rocedu/p/6371315.html)。

      1. 初步掌握單元測試和TDD

      2. 理解並掌握面向物件三要素:封裝、繼承、多型

      3. 初步掌握UML建模

      4. 完成藍墨雲上 (1)-(5)實驗。  

    • 遇到的問題

     - 問題1:junit的配置,junit3配置後仍然無法使用
     - 問題1解決方案:重新配置路徑,嘗試了包括junit-4.12等許多版本,最後一股腦全部放進去才搞定
     - 問題2:在(2)中test charAt時,出現預期與實際情況一樣但是仍報錯
     - 問題2解決方案:檢查程式碼後發現單引號用成了雙引號- 問題1:junit的配置,junit3配置後仍然無法使用

     - 問題3:對於設計模式的格式和具體方法不清楚,包括Byte等的包裝類不熟悉
     - 問題3解決方案:查閱資料

    • 心得體會

      這次實驗對於TDD和設計模式這些新的東西有了更深的體會,特別是對於產品程式碼和測試程式碼的理解,產品程式碼相當於一個類,測試程式碼通過呼叫這個類中的方法來驗證這個類是否發揮了作用。其次是設計模式中的工廠方法模式,老師提供的示例中主要是使用這個模式,還有包括抽象工廠模式(AbstractFactory)等許多模式,通過程式碼擴充,對於設計模式的可重用性、可擴充性、可維護性和靈活性好等特點有了更進一步地理解。

    4.第四章

    • 簡要內容

    (一)Java Socket程式設計

    1.學習藍墨雲上教材《Java和Android程式設計》“第16章 輸入/輸出 ”和“第22章 網路”,學習JavaSocket程式設計
    2.結對程式設計。結對夥伴A編寫客戶端SocketClient.java,結對夥伴B編寫伺服器端。
    3.截圖加學號水印上傳藍墨雲,程式碼push到碼雲,並撰寫實驗報告。

    (二)Java和密碼學

    參考http://www.cnblogs.com/rocedu/p/6683948.html

    以結對的方式完成Java密碼學相關內容的學習(帖子中所有程式碼和相關知識點需要學習)。提交學習成果碼雲連結和代表性成果截圖,要有學號水印。

    (三)編寫有理數/複數計算器  

    結對程式設計,結對夥伴A編寫有理數計算器。結對夥伴B編寫複數計算器。截圖加水印上傳藍墨雲,程式碼push碼雲。

    (四)遠端有理數計算器

    結對程式設計,結對夥伴A程式設計實現客戶端,結果夥伴B實現伺服器端。
    客戶端通過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字串的形式傳送給夥伴B(伺服器端),伺服器端根據字串計算出結果為5/12,並把結果返回給客戶端A,A收到結果後輸出結果。截圖加水印上                傳藍墨雲,程式碼push碼雲。

    (五)遠端複數計算器  

    結對程式設計,結對夥伴B程式設計實現客戶端,結果夥伴A實現伺服器端。
    客戶端通過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字串的形式傳送給夥伴A(伺服器端),伺服器端根據字串計算出結果為5/12,並把結果返回給客戶端B,B收到結果後輸出結果。截圖加水印上傳藍墨雲,程式碼push碼雲。
    注意實驗四(4)和實驗四(5),一個人不能僅實現客戶端,必須實現一個客戶端和伺服器,否則兩個實驗均不得分!!!

    • 遇到的問題

    - 問題1:關於有理數計算器的編寫時,由於像個憨批忘記有nextToken這個方法無法從輸入的算式中提取數字
    - 問題1解決方案:用for 迴圈定位空格,記錄空格的位置,用substring提取數字和運算子
    - 問題2:對於IP地址稍做了研究因為在我嘗試多次修改地址時發現並不會影響連結
    - 問題2解決方案:後來瞭解到從127.255.255.255到127.0.0.1都是本機地址,稱為環回地址

    • 心得體會

    這次還是學到了很多的東西,特別是自己嘗試去研究特定的方法,像一開始忘記了有nextToken這東西,然後研究出靠空格來定位,用陣列來記錄空格位置,再分割算式的方法提取數字和運算子,總的來說還是非常棒的(說不定就是nextToken的底層程式碼呢嘿嘿嘿),包括實現客戶端和伺服器的迴圈問答,下次繼續加油。

    5.第五章、第六章

    • 簡要內容

    1.連結串列練習,要求實現下列功能:

    通過鍵盤輸入一些整數,建立一個連結串列;
    這些數是你學號中依次取出的兩位數。 再加上今天的時間。  
    例如你的學號是 20172301
    今天時間是 2018/10/1, 16:23:49秒
    數字就是
    20, 17,23,1, 20, 18,10,1,16,23,49
    列印所有連結串列元素, 並輸出元素的總數。
    在你的程式中,請用一個特殊變數名來紀錄元素的總數,變數名就是你的名字。 例如你叫 張三, 那麼這個變數名就是
    int nZhangSan = 0; //初始化為 0.
    做完這一步,把你的程式簽入原始碼控制(git push)。

    2.連結串列練習,要求實現下列功能:

    實現節點插入、刪除、輸出操作;
    繼續你上一個程式, 擴充套件它的功能,每做完一個新功能,或者寫了超過10行新程式碼,就簽入程式碼,提交到原始碼伺服器;
    從磁碟讀取一個檔案, 這個檔案有兩個數字。
    從檔案中讀入數字1, 插入到連結串列第 5 位,並列印所有數字,和元素的總數。 保留這個連結串列,繼續下面的操作。
    從檔案中讀入數字2, 插入到連結串列第 0 位,並列印所有數字,和元素的總數。 保留這個連結串列,並繼續下面的操作。
    從連結串列中刪除剛才的數字1. 並列印所有數字和元素的總數。

    3.連結串列練習,要求實現下列功能:

    使用氣泡排序法或者選擇排序法根據數值大小對連結串列進行排序;
    如果你學號是單數, 選擇氣泡排序, 否則選擇選擇排序。
    在排序的每一個輪次中, 列印元素的總數,和目前連結串列的所有元素。
    在(2)得到的程式中繼續擴充套件, 用同一個程式檔案,寫不同的函式來實現這個功能。 仍然用 nZhangSan (你的名字)來表示元素的總數。

    • 遇到的問題

    - 問題1:一開始寫的deleteElement方法有大問題,從頭結點開始遍歷連結串列的時候一直到tail都不能找到目標元素。
    - 問題1解決方案:沒有解決(9#%&#),但是學到了怎麼使用debug和設定斷點,而且也大概發現了問題,在進入deleteElement方法的時候,頭指標並不為空,而且元素在比較時可能存在內容無法比較,可能需要重寫equals(人類極限了屬於)。
    - 問題2:在冒泡的時候首先遇到的問題是element的比較。因為一開始的程式碼中連結串列的元素是Time類,就是上面截圖中的Time類,但是兩個類怎麼比較。。。。直接蚌埠住了,再加上跟deleteElement死磕了好幾個鍾,所以放棄思考了
    - 問題2解決方案:把Time類刪了,刪乾淨了,全部換成Integer,這樣冒泡的排序也很好寫。

(按順序)總結所做過的作業

  • 作業1:xxx

(按順序)實驗報告連結彙總

  • 實驗一 實驗名稱:簡要內容

實驗二 實驗名稱:簡要內容

……

程式碼託管連結:

  • 給出statistic.sh的執行結果,統計本學期的程式碼量。

課程收穫與不足

  1. 自己的收穫(投入,效率,效果等)
  2. 自己需要改進的地方