1. 程式人生 > 其它 >軟體構造實驗LAB1 部分心得記錄

軟體構造實驗LAB1 部分心得記錄

Question 1 Magic Squares

  在編寫isLegalMagicSquare()函式時,需要注意的方面有:

    1.數字不能重複,必須是正整數。

    2.輸入檔案格式要正確,數字之間要以製表符分開。

    3.幻方格式要正確,必須是標準的正方形。

    4.對角線,行,列的和必須相等。

  除了關注幻方本身,還要關注檔案讀取是否會出現異常,用try catch語句處理異常。

      

  在閱讀generateMagicSquare()函式並查閱資料後,可得知該函式採用Siamese方法建構函式,具體方法如下:

  • 把放置在第一行的中間。
  • 順序將等數放在右上方格中。
  • 當右上方格出界的時候,則由另一邊進入。
  • 當右上方格中已經填有數,則把數填入正下方的方格中。
  • 按照以上步驟直到填寫完所有個方格。

該方法只能用於奇數級幻方構造,偶數報錯java.lang.ArrayIndexOutOfBoundsException::原因為越界訪問陣列。當填入了偶數,必定有一個n的倍數被填入[n-1][n-1],此時由於原函式未作防越界措施:

if (i % n == 0)

row++;

導致row越界訪問,而即使做好防越界措施,計算得出的幻方也不正確。

負數報錯java.lang.NegativeArraySizeException:陣列的規格被定義為負數,因此報錯。

Question 2:Turtle Grapic

  在實驗過程中,個人認為Convex Hulls帶來的困難較大,另外比較簡單。

  首先明確函式的目的以及凸包的定義:該函式目的為計算一系列點陣中構成凸包的點,其中點集Q的凸包(convex hull)是指一個最小凸多邊形,滿足Q中的點或者在多邊形邊上或者在其內。圖1中由紅色線段表示的多邊形就是點集Q={p0,p1,...p12}的凸包。值得注意的是凸包不包括凸包已有線段上的點。

  本人採用的凸包演算法為:尋找x座標最小的點位,並在其中尋找y最小的點,以此為起點,y正方向為初始位置,利用上一個Problem中的計算偏轉角度函式尋找偏轉角度最小的點,並以那個點為起點繼續尋找。

  編寫程式過程中出了兩次錯誤:一是沒有仔細檢視凸包概念,把邊界上的點也算入凸包了,在檢查test檔案以後發現了問題並修改。二是計算偏轉角度的函數出錯:

  要注意偏轉角度不能超出0-360的範圍,還要注意的是java的atan()方法返回值為弧度制,且範圍為-Π/2-Π/2,需要自己調整範圍。

  函式caculateBearings()是計算一系列點之間的偏轉角度,需要提前瞭解List型別的使用方法。另外只需要呼叫上一個函式進行計算即可。

Question 3:Social Network

  主要關注Java類的編寫,其中成員為保證安全應該使用private字首,防止外部直接訪問。

  測試的編寫要關注多種情況,如對於計算社交距離的函式,應該嘗試測試未新增的節點,不連通的節點,有多條通路的節點,重複的節點。

 總結

  以前對Java語言不大熟悉的我,經過第一次軟體構造實驗,初步體驗了Git使用與Java的編寫。自學的能力也得到了提升,希望在今後的軟體構造課程與實驗中,我能保持學習狀態,更進一步。