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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

哈工大 软件构造Lab1的设计实现

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈工大 软件构造Lab1的设计实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2021年春季學期

計算學部《軟件構造》課程

Lab 1實驗報告

目錄

1. 實驗目標概述 3

2. 實驗環境配置 3

3. 實驗過程 6

3.1 Magic Squares 6

3.1.1 isLegalMagicSquare() 6

3.1.2 generateMagicSquare() 8

3.2 Turtle Graphics 10

3.2.1 Problem 1: Clone and import 10

3.2.2 Problem 3: Turtle graphics and drawSquare 10

3.2.3 Problem 5: Drawing polygons 11

3.2.4 Problem 6: Calculating Bearings 11

3.2.5 Problem 7: Convex Hulls 12

3.2.6 Problem 8: Personal art 12

3.2.7 Submitting 14

3.3 Social Network 14

3.3.1 設計/實現FriendshipGraph類 14

3.3.2 設計/實現Person類 15

3.3.3 設計/實現客戶端代碼main() 16

3.3.4 設計/實現測試用例 17

4. 實驗進度記錄 18

5. 實驗過程中遇到的困難與解決途徑 19

6. 實驗過程中收獲的經驗、教訓、感想 19

6.1 實驗過程中收獲的經驗和教訓 19

6.2 針對以下方面的感受 19

實驗目標概述

本次實驗通過求解三個問題,訓練基本 Java 編程技能,能夠利用 Java OO 開
發基本的功能模塊,能夠閱讀理解已有代碼框架并根據功能需求補全代碼,能夠
為所開發的代碼編寫基本的測試程序并完成測試,初步保證所開發代碼的正確性。
另一方面,利用 Git 作為代碼配置管理的工具,學會 Git 的基本使用方法。

? 基本的 Java OO 編程

? 基于 Eclipse IDE 進行 Java 編程

? 基于 JUnit 的測試

? 基于 Git 的代碼配置管理

實驗環境配置

在這里給出你的GitHub Lab1倉庫的URL地址。

https://github.com/ComputerScienceHIT/HIT-Lab1-1190200828

實驗過程

Magic Squares

該任務的目標:設計isLegalMagicSquare()函數,判定給定的幾個矩陣是否為magic
square;將給定的生成奇數階的magic
square的generateMagicSquare()函數作為靜態函數加入我的程序代碼中,將生成的矩陣存入6.txt并調用isLegalMagicSquare()判斷所生成的矩陣是否正確。該階段涉及到文件讀寫操作、對某些特定函數的調用(例如split等)、對部分異常的處理(例如矩陣中有負數、浮點數,或是行列數不相等)等。

isLegalMagicSquare()

1.根據實驗要求,我不能上來直接就去用magic矩陣的定義去判斷其正確性,即每行每列每個對角線的元素和都相等;而是應該先判斷給定的矩陣是否合理,即判斷行列數是否相等、矩陣中是否有浮點數、負數等。由此,我的想法是設置一個整型變量n = 0,對于txt文件先按行讀入,每讀入一行n++,直到讀完文件,此時n的值即為矩陣行數。然后,依舊是按行讀入文件,每讀入一行,將其存入String line中,并調用split(“\t”)將其分割并存入String[] line_cut,比較行數n與line_cut.length,不相等則輸出錯誤提示并返回false,后經過測試,當文件未用”\t”進行分割時,也會導n != line_cut.length,因此在這里一并輸出錯誤提示;然后判斷line_cut中的每一個元素是否都是正整數,按位尋訪line_cut,若出現某一位不在數字字符’0’-‘9’中,則輸出錯誤提示并返回false。綜上所述,即有如下代碼:

  • 以上錯誤判斷完畢后,將讀入的文檔存入矩陣magic中,并按照magic矩陣定義進行測試,若不符合magic矩陣定義,則返回false。注意,在此過程中,并未輸出錯誤提示,表示矩陣本身不存在行列數不相等等錯誤。于是有以下代碼:
  • 至此,isLegalMagicSquare()函數設計完畢;

  • 結果展示:
  • generateMagicSquare()

  • 程序代碼已經在ppt中給出,程序流程圖如下:

  • 除該程序代碼外,需對該函數的輸入進行測試,以防輸入為偶數或負數。該測試在我的main函數中完成,輸入階數為負數或偶數或輸入階數小于2時輸出錯誤提示并予以重新輸入,但是,如果輸入根本并非整數,而是浮點數或字符時,則輸出錯誤提示且不允許重新輸入,于是有如下代碼:

  • 除此之外,還需要在函數中加入文件寫入操作,將產生的magic矩陣存入6.txt以便于main函數中測試其生成的magic矩陣的正確性,添加的代碼如下:

  • 結果展示:

  • Turtle Graphics

    該任務的目標:clone已有的程序后,利用turtle按照要求畫圖,主要需要修改及再編程的是TurtleSoup類,其中的一些函數編程時需要結合我們已有的數學幾何知識、TurtleSoup類中的提示信息以及測試用的TurtleSoupTest類中的提示信息,最后可以發揮想象力進行自己的創作。

  • Problem 1: Clone and import

  • 從github獲取代碼
  • 由于clone出現問題,找不到實驗報告上給的那個鏈接,所以我進入該鏈接后,將代碼逐個復制到我的程序類中。

  • 初始化本地倉庫

    git init

  • Problem 3: Turtle graphics and drawSquare

  • 該函數需要實現:已知邊長,畫出邊長為指定數值的正方形。參數是海龜對象turtle和邊長sideLength。

  • 循環執行,每次畫筆直行sideLength距離,然后畫筆方向旋轉90度,循環執行4次后即可得到所需要的正方形,函數代碼如下:

  • 結果展示(sideLength = 40):

  • Problem 5: Drawing polygons

  • 首先,要求計算已知正多邊形邊數的內角度,該計算由已知公式可以推導,因此相關函數代碼如下:

  • 根據正方形的畫法,只需要將畫筆的轉向角度設置為180 –
    內角度數,循環多邊形邊數次數即可??紤]到畫筆轉向既能是順時針又能是逆時針,故在此聲明:sides可為負數,且當sides為負整數時,代表著畫筆將逆時針旋轉,且旋轉度數為180
    – 內角度數,并且取sides的絕對值為正多邊形邊數。函數代碼如下:

  • Problem 6: Calculating Bearings

  • 首先,已知起點和當前朝向角度,要求起點到終點需要轉動的角度。根據幾何運算,得函數代碼如下:

  • 上述問題的擴展:此時有若干個點,要求從第一個點開始到第二個點,再從第二個點到第三個點……以此類推每次轉向的角度。以起點為第一個點,循環n-1次,每次將第i+1號點設置為“終點”,通過上一個函數計算旋轉角度并存儲到List中,將下一次的“起點”用當前“終點”更新,繼續循環。程序代碼如下:

  • Problem 7: Convex Hulls

    由凸包算法(CSDN(ConvexHull凸包算法之Gift-Wrapping_Innovative
    Workstation-CSDN博客)上查閱),可得該函數代碼為:

    Problem 8: Personal art

    函數代碼:

    結果展示:

    Submitting

    由于第一次提交時已經進行過初始化以及與我的云倉庫的關聯,本次提交中只需要添加文件、注釋以及提交三個步驟。

    Social Network

    該任務的目標:設計一張社交網絡無向圖,連接互為朋友的人與人,并且能計算任意兩人之間需要的最少的關聯路徑。于是,該問題為最短路徑問題,而構建的圖為無向無權圖,所以利用DFS深度優先遍歷即可得到兩點間的最短路徑。

    設計/實現FriendshipGraph類

    存儲圖中的人姓名的集合:

    addVertex()函數:首先判斷Person
    p是否在圖中,若已經存在于圖中,則輸出錯誤信息,程序結束;否則將p添加至person中。

    addEdge()函數:在a、b的朋友列表里分別加入彼此。

    getDistance()函數:DFS深度優先算法求最短路徑

    設計/實現Person類

    Person類包括:

    Person():包括這個人的名字p_name,這個人的朋友列表friends;

    IsFriendOf(Person p):在p_name的朋友列表里加入p;

    設計/實現客戶端代碼main()

    由ppt給出:

    設計/實現測試用例

    思想:將a通過addVertex()函數加入testGraph1中,b不加入,因此,測試用例為a在testGraph1.person中,b不在;

    思想:將a、b通過addVertex()函數加入testGraph1中,調用addEdge()函數,在a、b加一條線,即關聯在一起,那么,a、b的朋友列表將包含彼此,因此測試用例中,a在b.friends中,b也在a.friends中;

    思想:getDistance測試中應包括自己與自己、相互認識的兩人、相互不認識但是有中間人關聯的兩人以及互不相干的兩人;

    測試結果:

    至此,實驗設計結束。

    總結

    以上是生活随笔為你收集整理的哈工大 软件构造Lab1的设计实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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