1.findmediansortedarrays
此函式為給定兩個已排好順序的陣列,找到這兩個陣列的中位數。
先把a和b中較長的陣列賦給b,然後在數值比較中標記逐漸指向中間,最終找到maxleft和minright兩個值。若m+n為奇數,則直接返回maxleft,若為偶數則返回(maxleft+minright)/2.0。
2.removecomments
此函式為刪掉**中的注釋,定義乙個布林型變數inblock,如果遇見/則變為真,不記錄之後的內容,遇見/,變為假,再開始記錄之後的內容。需要判斷什麼時候遇見/和/。
3.topvotedcandidate
此函式功能為找出最佳選舉人,先給定兩個陣列,乙個為選舉投票的人的陣列,乙個為選舉這些人時的時間的陣列。建立乙個雙層list的列表,構造方法為按照數量建立外層list,內層list為投票數為此的人的順序。因此外層list得到的序列的第0個元素的時間是有序的。內層list的時間也是有序的。q方法為找出最佳選舉人,按照雙層list的構造特點,進行兩層二分查詢。最終找到結果。
1…findmediansortedarrays
此函式共有兩處錯誤。一處是定義halflen時,當m+n為奇數時,halflen指向的是中間的前一位。另一處是返回maxleft時,錯誤之處是當m+n為偶數的時候返回maxleft,應為奇數返回。
2.removecomments
在找/和/的過程中,沒有進行判斷,會多次出現下表越界。並且沒有判斷遇見//的情況。最後輸入的時候只要inblock為false就應該輸入,而不是用else if來判斷這個條件。
3.topvotedcandidate
在構造a的時候出現錯誤,按照原始**,只會在a.get(1)中加入投票。
其次是兩次二分查詢,a的範圍是1到a.size()-1,a.get(i)的範圍是0到a.get(i).size()-1,並且兩次二分查詢需要考慮找到的值小於給定的t。
1.findmediansortedarrays
一是將halflen改為(m+n+1)/2:若m+n為奇數,halflen為(m+n)/2+1,即中間的數,若m+n為偶數,halflen為(m+n)/2,即中間偏左一位的數。
二是返回maxleft時的條件改為(m + n) % 2 == 1:m+n為奇數時,直接找中位數,為偶數時需要取平均值。
2.removecomments
在找/的時候,先發現/,在判斷有沒有下一位,若有則判斷是否是,若是則定義inblock為true。在找*/時,先找/,在判斷有沒有上一位,若有則判斷是否是*,若是則定義inblock為false。增加找//,先找先發現/,在判斷有沒有下一位,若有則判斷是否是/,若是這一行的後面都不讀。
3.topvotedcandidate
在構造a時,按照計數構造,因此將c改為count.getordefault(p, 0)+1。
其次是兩次二分查詢,外層:lo = 1, hi = a.size()-1,內層:lo = 0,hi = a.get(i).size()-1。並在二分查詢時考慮找到的值小於給定的t的情況。
軟體構造Lab4實驗總結
本實驗的主要工作是找到程式容易出錯的地方,並且盡力避免程式的崩潰。主要找到了以下幾種容易出錯的場合 1.trackgame的錯誤處理 1 如果game標籤沒有找到或者不合法,則丟擲異常game type error.2 如果num of track標籤沒有找到或者不合法,則丟擲異常num of tr...
軟體構造 Lab1
判斷幻方 我採取的讀檔案的方法時建立乙個輸出流,將檔案中的資料輸出到乙個byte 陣列中。將這個資料流按照utf 8的格式存入乙個string變數中。之後呼叫string的split方法,將其按 n 分割,這樣就得到了每一行的資料,獲取string陣列的長度即為行數,接下來對每一行分別按小數點和負號...
軟體構造 Lab3
遇到的一些問題 按鈕 覆寫 由於我的gui的實現是由乙個基礎類和三個子類組成,其中基礎類的一些按鈕的 實現要在子類中覆寫,但是我一直找不到好的方法去覆寫,所以我直接在子類中遍歷了該按鈕的所有 把它們都刪了然後重加 正規表示式匹配 在這個實驗裡我發現了正規表示式的乙個好用的功能,比如在匹配如下資訊時 ...