20202317向巖傑 2020-2021-2《資料結構與面向物件程式設計》課程總結
20202317向巖傑 2020-2021-2《資料結構與面向物件程式設計》課程總結
-
課程內容總結
- 第一章
-
- 簡要內容
基於命令列進行簡單的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的執行結果,統計本學期的程式碼量。
課程收穫與不足
- 自己的收穫(投入,效率,效果等)
- 自己需要改進的地方