日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件构造学习笔记-实验1

發布時間:2023/12/4 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件构造学习笔记-实验1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記錄一下做實驗1時遇到的問題。

準備工作

1.GitHub的注冊和配置
由于之前沒有接觸過GitHub,所以碰到了一些問題。GitHub是什么?怎么建立GitHub遠程倉庫與本地倉庫的連接?怎么在GitHub上傳和下載文件?
實驗完成后我可以簡單回答上述問題:Git是分布式版本控制系統;通過SSH key建立遠程與本地的連接;通過Git Bash中的命令進行文件的上傳和下載。

圖1-常用的git命令

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自動下載的外部庫存放的位置。

圖2-修改settings本地庫的位置

然后如下位置添加阿里的鏡像,之前沒有添加時下載插件速度很慢甚至會失敗。然后就能建立maven project了!

圖3-修改setting的鏡像地址

問題1

問題1主要涉及到Java的文件讀寫問題。由于之前對這部分不熟悉,我又把文件部分看了一遍,再做時思路就明確了。
題目中提示按行讀入,那么我就用類java.io,BufferedReader進行讀取。讀取一行后,將其轉化成字符數組并檢查輸入合法性。如果輸入合法,則用String類的split方法,將字符串轉化成字符串數組,再分別轉化成數字,存放在二維數組中。當對所有行操作完畢時,對所得二維數組進行驗證即可。
對各列求和時,想起計算機系統史老師教我們的,考慮到了局部性原理的問題。

圖4-求數組每列的和

問題2

問題2比較困難的部分是convexHull的完成,也就是凸包問題。
當代碼出現細微問題的時候,對它進行測試卻發生了不可思議的問題。完成問題2的所有方法后,我用JUnit單獨測試了每個方法,過了,非常開心。但是當我運行TurtleSoupTest的時候,裂開了,凸包沒過。我很不甘心,把凸包測試方法的語句在main里重寫一遍,發現跟答案一模一樣。我又從測試方法里一步步debug,也沒有發現問題。但是再運行TurtleSoupTest,還是報錯。

圖5-莫名其妙的錯誤

在piazza上求助,有人說換Eclipse試試( 我一直在用IDEA),我用Eclipse運行測試類,出現了綠條。在Eclipse上運行了一下convexHullTest方法,又報錯了。
終于發現了一個不嚴謹的地方,修改之后一切都正常了。

圖6-測試類通過

下面說一說我寫的凸包算法的思路:
1.選取橫坐標最小的點為起始點。如果有多個則選擇縱坐標最大的。
2.標記起始點為已加入,每次循環遍歷除自身外的所有點,從其余點中找到順時針角度最小的點。
3.標記該點為起始點,重復2直到下一個找到的目標點為已加入的狀態。
特殊情況:輸入點數為0,1,2時,直接返回輸入集合;多個點同時在一條邊上時,創建并加入一個臨時集合,在遍歷完成后如果該集合的點滿足角度最小,則選擇邊長最大的。

圖7-每次遍歷的操作

問題3

無向圖的建立和廣度優先搜索的問題。當定義好Person類之后,操作會比較簡單。

圖8-我定義的Person類

FriendshipGraph的方法除getDistance都比較簡單。重點說一下getDistance方法的實現。
要采用廣度優先搜索,我首先想到了隊列。Java庫中有隊列的類,所以用起來很方便。當輸入和輸出為同一元素時,直接返回0即可。如果不同,則建立隊列進行廣搜。上學期的cxk實驗讓我對廣搜的寫法異常熟悉,很快就能寫出來。

圖9-利用隊列完成廣度優先搜索

關于Java隊列類的成員方法,建議參考
Java 實例 - 隊列(Queue)用法 https://www.runoob.com/java/data-queue.html

總結

以上是生活随笔為你收集整理的软件构造学习笔记-实验1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。