软件构造学习笔记-实验1
記錄一下做實驗1時遇到的問題。
準備工作
1.GitHub的注冊和配置
由于之前沒有接觸過GitHub,所以碰到了一些問題。GitHub是什么?怎么建立GitHub遠程倉庫與本地倉庫的連接?怎么在GitHub上傳和下載文件?
實驗完成后我可以簡單回答上述問題:Git是分布式版本控制系統;通過SSH key建立遠程與本地的連接;通過Git Bash中的命令進行文件的上傳和下載。
GitHub新手詳細教程
https://blog.csdn.net/Hanani_Jia/article/details/77950594?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
Git教程
https://www.liaoxuefeng.com/wiki/896043488029600
2.maven的配置和初步使用
由于實驗要求代碼完成后要從Eclipse環境脫離開來,所以我選擇使用maven進行build。首先下載maven,在下載目錄中打開apache-maven-3.6.3\conf\settings.xml(這里強烈建議使用Notepad++進行編輯,非常好用)。將圖示位置修改成本地maven倉庫的位置,本地maven倉庫簡單來說就是maven自動下載的外部庫存放的位置。
然后如下位置添加阿里的鏡像,之前沒有添加時下載插件速度很慢甚至會失敗。然后就能建立maven project了!
問題1
問題1主要涉及到Java的文件讀寫問題。由于之前對這部分不熟悉,我又把文件部分看了一遍,再做時思路就明確了。
題目中提示按行讀入,那么我就用類java.io,BufferedReader進行讀取。讀取一行后,將其轉化成字符數組并檢查輸入合法性。如果輸入合法,則用String類的split方法,將字符串轉化成字符串數組,再分別轉化成數字,存放在二維數組中。當對所有行操作完畢時,對所得二維數組進行驗證即可。
對各列求和時,想起計算機系統史老師教我們的,考慮到了局部性原理的問題。
問題2
問題2比較困難的部分是convexHull的完成,也就是凸包問題。
當代碼出現細微問題的時候,對它進行測試卻發生了不可思議的問題。完成問題2的所有方法后,我用JUnit單獨測試了每個方法,過了,非常開心。但是當我運行TurtleSoupTest的時候,裂開了,凸包沒過。我很不甘心,把凸包測試方法的語句在main里重寫一遍,發現跟答案一模一樣。我又從測試方法里一步步debug,也沒有發現問題。但是再運行TurtleSoupTest,還是報錯。
在piazza上求助,有人說換Eclipse試試( 我一直在用IDEA),我用Eclipse運行測試類,出現了綠條。在Eclipse上運行了一下convexHullTest方法,又報錯了。
終于發現了一個不嚴謹的地方,修改之后一切都正常了。
下面說一說我寫的凸包算法的思路:
1.選取橫坐標最小的點為起始點。如果有多個則選擇縱坐標最大的。
2.標記起始點為已加入,每次循環遍歷除自身外的所有點,從其余點中找到順時針角度最小的點。
3.標記該點為起始點,重復2直到下一個找到的目標點為已加入的狀態。
特殊情況:輸入點數為0,1,2時,直接返回輸入集合;多個點同時在一條邊上時,創建并加入一個臨時集合,在遍歷完成后如果該集合的點滿足角度最小,則選擇邊長最大的。
問題3
無向圖的建立和廣度優先搜索的問題。當定義好Person類之后,操作會比較簡單。
FriendshipGraph的方法除getDistance都比較簡單。重點說一下getDistance方法的實現。
要采用廣度優先搜索,我首先想到了隊列。Java庫中有隊列的類,所以用起來很方便。當輸入和輸出為同一元素時,直接返回0即可。如果不同,則建立隊列進行廣搜。上學期的cxk實驗讓我對廣搜的寫法異常熟悉,很快就能寫出來。
關于Java隊列類的成員方法,建議參考
Java 實例 - 隊列(Queue)用法 https://www.runoob.com/java/data-queue.html
總結
以上是生活随笔為你收集整理的软件构造学习笔记-实验1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件构造学习笔记-第二周
- 下一篇: 软件构造学习笔记-第三周