20172303 2017-2018-2 《程序設計與數據結構》第6周學習總結

20172303 2017-2018-2 《程序設計與數據結構》第6周學習總結

教材學習內容總結

1.數組及其的聲明和使用

  • 數組用於分組和組織數據。
  • 數組索引老是從0開始的,其緣由是儘量地使元素地址的計算更簡單容易。
  • 元素地址計算方法:元素的索引值×每一個元素所佔字節數+數組起始地址。
  • 建立數組必須聲明引用變量,數組能夠保持任何基本類型的數據或對象。
  • 在全部java運算符中,「[]」有最高的優先級。
  • 聲明方式有兩種:int[] 名稱和int 名稱[]。兩種聲明方式是等價的,但通常使用第一種。
  • 數組中還可使用一個初始值表實例化一個數組對象。
    • 例:int[] class23 = {01, 02, 03, 04, ... ,33}

2.邊界檢查

  • 邊界檢查保證引用一個數組元素的索引值在有效範圍內。
  • 檢查邊界錯誤的經常使用方法是使用length常量。
    • 例:有一個有10個元素的數組A,則A.length的值爲10,其最大索引值爲9

3.對象數組

  • 一個對象數組實際上是一個對象引用數組。
  • 實例化對象數組是爲保存對象引用預留空間,對每一個數組元素所表明的對象仍須要分別實例化。

4.命令行實參

  • 咱們從第一章開始常常敲的那個String[] 叫命令行形參_(:з」∠) _
  • 命令行實參儲存在String對象的數組中,並將其傳遞給main方法。

5.可變長度參數表

  • 格式:類名(參數類型 ... 數組名稱)省略號表明該方法接受的參數個數可變。
  • 可變參數必須寫在形參表的最後。

6.二維數組和高維數組

  • 二維數組中有兩個索引值,一個指定行,一個指定列。
  • 高維數組又稱不規則數組。通常用於在多個層次上管理大量數據。

教材學習中的問題和解決過程

  • 問題1:不是很理解「差1錯誤」究竟指什麼
  • 問題1解決方案:經過查資料知道了它是一個「在計數時因爲邊界條件判斷失誤致使結果多了一或少了一的錯誤,一般指計算機編程中循環多了一次或者少了一次的程序錯誤」,是一種邏輯錯誤。簡而言之就是程序員在編寫程序的時候本身想錯了。我剛開始把它想得複雜了,覺得它是一個計算機運行時會產生的運行錯誤
  • 問題2:不知道例8.3中那一句upper[current-'A']++到底是什麼加一
  • 問題2解決方案:在問了學長以後知道了[current-'A']是先到達預約的索引值,而後將索引值所對應的數組元素加一。
  • 問題3:類/對象/變量/參數的含義?區別?聯繫?
  • 問題3解決方法:剛學的時候還很清楚但感受學的越多越糊...翻書翻了好久順便查了不少資料總結了一下。
    • 類:類是組成java程序的基本要素,它封裝了一類對象的屬性和方法。
    • 對象:類是建立對象的模板,當使用一個類建立了一個對象時,也就是說給出了這個類的一個實例。
    • 變量:區別於常量的一種可變數據。java中的三大變量是靜態變量、實例變量和局部變量。局部變量就是本地變量,在方法、構造器或者塊中使用,在方法、構造器或者塊進入時被建立。實例變量在類中聲明,可是它在方法、構造器以外。靜態變量在類中用static關鍵字聲明,可是它在方法、構造器或者塊以外。
    • 參數:參數分兩種,一種叫形參,一種叫實參。在方法名後面括號裏面用逗號分開的就是形參。當方法沒有參數時,若是想要使用這個方法的話必須在調用這個方法時給它傳遞形參的實際值(這就是實參)
    • 聯繫:在網上找到一篇博客,大概總結了一下見下圖:

代碼調試中的問題和解決過程

  • 問題1:在修改PP5.3以後,IDEA上git push失敗,顯示讓merge(合併),
    合併以後目錄有些變化,

    但仍然不能git push把代碼複製到虛擬機上進行git push,顯示「更新被拒絕,由於遠程倉庫包含您本地尚不存在的提交。這一般是由於另一個倉庫已向該引用進行了推送。再次推送前,您可能須要先整合遠程變動」
  • 問題1解決方案:首先這個時候我幹了一件很蠢的事情就是直接把碼雲上的PP53.java給刪了,以後屢次嘗試git push所有失敗(╥╯^╰╥)原本準備週一去問王老師的,想起上回本身什麼都沒有幹直接就去問被老師說是「伸手黨」就決定先本身試着解決,崩了再找老師_(:з」∠)_ 結果在網上真的找到了相似的問題解答。按着其中給的方法先git pull而後merge最後再apply成功解決了問題,不過在查到的教程中問題在這裏並無解決,多是一個比個人更復雜的問題吧 _ (:з」∠)_
  • 問題2:運行PP8.5時標準方差死活輸出不了正確值
  • 問題2解決方法:第一遍檢查以後發現h = Math.sqrt(i);一句應該放在{}以外,但改掉以後輸出結果仍是錯的。最後採用了分步調試的方法,發現是for循環的三元運算符中的布爾表達式設定出了問題,我剛開始設定的是e <= n,意思就是當調用到索引值爲n的數組元素結束循環,但實際上個人數組中只有n-1個數組元素,因此當n=e=3時,程序就發生了錯誤。但我仍是不清楚爲何我嘗試的1,2,3的標準方差在錯誤的時候會輸出√6而不是其餘數字。(在週一上完課明白了,老師說當索引值所對應的數組元素是空的時,將會隨機輸出某個數。)
    修改前

    修改後

    分步調試中的錯誤

代碼託管

上週考試錯題總結(正確爲綠色,錯誤爲紅色)

  • 錯題1:The idea that program instructions execute in order (linearly) unless otherwise specified through a conditional statement is known as
    • A . boolean execution
    • B . conditional statements
    • C . try and catch
    • D . sequentiality
    • E . flow of control
  • 緣由及理解狀況:這句話的原文在書上P133,原文說的是「除非特別指定,不然程序中的語句會按線性方式順序地執行。」剛看這道題的時候感受沒有正確答案,感受D的意思和線性方式比較相近就選了E。
  • 錯題2:Which of the sets of statements below will add 1 to x if x is positive and subtract 1 from x if x is negative but leave x alone if x is 0?
    • A . if (x > 0) x++;
      else x--;
    • B . if (x > 0) x++;
      else if (x < 0) x--;
    • C . if (x > 0) x++;
      if (x < 0) x--;
      else x = 0;
    • D . if (x == 0) x = 0;
      else x++;
      x--;
    • E . x++;
      x--;
  • 緣由及理解狀況:C的狀況中,第二個if不論什麼狀況下都會執行,因此當x是正數時,最後輸出的會是0.
  • 錯題3:If x is an int where x = 1, what will x be after the following loop terminates?
    while (x < 100)
    x *= 2;
    • A . 2
    • B . 64
    • C . 100
    • D . 128
    • E . none of the above, this is an infinite loop
  • 緣由及理解狀況:當x=64時,它仍然知足布爾表達式,因此還會執行一次,x=128,,不知足布爾表達式,輸出。
  • 錯題4:Which of the following are true statements about check boxes?
    • A . they may be checked or unchecked
    • B . radio buttons are a special kind of check boxes
    • C . they are Java components
    • D . you can control whether or not they will be visible
    • E . all of the above
  • 緣由及理解狀況:這個內容看書的時候並無看到,是否是超綱了?
  • 錯題5:In order to compare int, float and double variables, you can use <, >, ==, !=, <=, >=, but to compare char and String variables, you must use compareTo( ), equals( ) and equalsIgnoreCase( ).
    • A . true
    • B . false
  • 緣由及理解狀況:char變量也可使用<, >, ==, !=, <=, >=,但字符串必須用compareTo( ), equals( ) and equalsIgnoreCase( )。
  • 錯題6:How many times will the following loop iterate?
    int x = 10;
    do {
    System.out.println(x);
    x--;
    } while (x > 0);
    • A . 0 times
    • B . 1 times
    • C . 9 times
    • D . 10 times
    • E . 11 times
  • 緣由及理解狀況:do-while語句最後的while語句,不知足條件時也要執行一次

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 優勢:每週重要成長記錄很詳細,在錯題總結中有本身的實踐。
    • 問題:博客排版還需增強,尤爲是圖片的擺放。從問題總結中感受對課本知識的挖掘不是很深刻。教材內容總結還能夠更詳細一點。錯題總結中沒有價值的錯題能夠刪去_(:з」∠)_
  • 代碼中值得學習的或問題:
    • 優勢:代碼相比個人更加簡潔,而且在適當的地方有註釋。commit寫的很好。
    • 問題:在編譯過程當中發現他在數組這方面運用的不是很好。

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172322
    • 結對學習內容
      • 共同討論例8.3和例8.8的某些代碼,不懂的地方先相互解決,解決不了時找學長答疑。
      • 討論PP8.5,尤爲是最後計算標準方差時,兩我的的代碼基本是一個意思,可是結果都不對,並且不對的結果也不同。因此就對每一個人的代碼進行分部調試共同尋找問題。

其餘(感悟、思考等,可選)

  • 本週最大的感受是看完理論,應用跟不上。和以前作PP不同,這周作題時老是感受沒思路,有種無從下手的感受,尤爲是想不清數組應該用在哪裏。
  • 教材複習狀況
    • 複習進度(頁數):42/283
    • 重要成長:從新複習了轉義序列
    • 感想:真正開始複習以後發現沒有本身想的那麼快,那麼輕鬆。每每都是擠出時間去看的。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 120/120 1/1 9/9
第二週 246/366 1/2 9/18
第三週 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五週 1409/2645 1/6 24/77
第六週 561/3206 1/7 20/97 再次搞清了一些本身有點含糊不清的概念
  • 計劃學習時間:15小時
  • 實際學習時間:20小時
  • 改進狀況:本週只有五天的時間作做業,原本以爲內容很少應該不會花費多久,沒想到課後題那麼難(;д;)

參考資料

相關文章
相關標籤/搜索