1. 程式人生 > >20172314 2017-2018-2 《程序設計與數據結構》第5周學習總結

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

classes bool efi app {} ann jpg 浮點數 cut

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

教材學習內容總結

  • 布爾表達式:相等性運算符:“==”,“!=”分別表示“相等”與“不相等”。
    關系運算符:“<”, “>”, “<=”, “>=”分別表示“小於”, “大於”,“小於等於”,“大於等於”。
    (以上運算符優先級大於算術運算符)。
    邏輯運算符:“!”, “&&”, “||”分別表示“非”, “與”, “或”。

  • 數據比較:重點在於浮點數比較:浮點數用二進制表示,兩個數的長度可能不等,只有當兩個浮點數的二進制數位相等時,浮點數的值才相等,所以應該計算兩數的差與一個誤差標準相比。
  • 字符比較:Unicode值比較
  • 字符串比較:String類提供comepareTo方法,返回-,+,0 (返回非布爾值);
    還有equals : string.equals(string2),返回true/false。
  • if語句:條件判斷為true則繼續執行,否則不執行if語句中的語句。
  • if-else語句:條件成立執行第一條語句,否則執行第二條語句。加{}可執行多條語句(語句塊)。
  • while語句:條件成立時執行語句,與if區別在於他執行完後會再次計算表達式的值,如果仍然為true,將再次執行循環體,直到表達式為false。
  • 嵌套循環:一個循環中包含另一個循環。內層循環結束後再繼續執行外層循環。
  • 叠代器:是一種對象,提供了一些方法有助於一次處理某個集合,每個叠代器對象都有一個可以返回布爾值的hasNext方法,可以充當處理每項元素的循環控制條件。
  • switch:將一個指定的字符或整型值分別於若幹個case子句中的值進行匹配。通常只需執行一種case子句下的語句,所以break語句幾乎是必須使用的。
  • 條件運算符:“(布爾條件)?(表達式1):(表達式2)” ,如果布爾條件的運算結果為true將返回表達式1,否則將返回表達式2。
  • while循環與do-while循環:前者先判斷再執行;後者先執行一次後再判斷是否接著執行。

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

  • for和while的區別是什麽
  • while:
    while(Boolean_expression)


    {
    //Statements
    }
    如果布爾表達式的結果為真,則循環中的動作將被執行。這將繼續下去,只要該表達式的結果為真。當表達式進行測試,結果為 false,循環體將被跳過,在while循環之後的第一個語句將被執行。
    for:
    for(initialization; Boolean_expression; update)
    {
    //Statements
    }
    初始化步驟首先被執行,然後計算布爾表達式,如果結果為false,不執行循環語句,跳轉到循環語句之外下一句;如果結果為true則執行循環體,再執行更新,然後再次計算布爾表達式,如果還為true則重復執行循環體,否則跳出循環。

  • 教材課後題SR6.10
    int low = 10, high = 0;
    do
    {
    System.out.println(low);
    low++
    } while (low <= high);
    我認為輸出只有”10“,執行完一次後,判斷條件不滿足,不會再循環。但答案是”10,11,12......."無限的。之後把書上的代碼實際操作了一遍,發現答案是錯的,如圖
    技術分享圖片
    技術分享圖片

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

  • 問題一:錯誤提示找不到符號,如圖
    技術分享圖片

  • 問題一解決:開始以為後面代碼輸入出錯了,檢查好幾遍之後都覺得沒有問題,聯想到之前出現“找不到符號”的問題是因為名稱輸入錯誤,經歷過一番苦苦尋找,加上與書上其他類似代碼的比較之後,終於發現一開頭就缺少了"import java.util.Scanner" <@_@>鑒於最近老是犯低級錯誤並且為之付出很多時間去修正,所以這個問題一定要記錄下來並且置頂,提醒自己以後絕不能再犯同樣的錯誤。
  • 問題二:書上課後題PP5.3在編譯運行後可以無限輸入整數,無法終止,如圖
    技術分享圖片

  • 問題二解決:自己檢查後沒有發現錯誤之處,在助教的幫助下發現了問題所在。如下代碼是多余的,
    while(xxx.hasNext())
    String str = String.valueOf(num);
    導致一直循環輸入整數操作。我之前寫它的時候是為了繼續檢索下一個字符,而我對輸入整數的定義是int型,再糾正之後把它改為了String型,省去了很多操作。
    技術分享圖片

  • 問題三:在做PP6.6時,錯誤提示變量已在方法中定義。如圖
    技術分享圖片

  • 問題三解決:錯誤原因在於之前已定義begin=0,但在for語句中再次定義。在編寫for語句時,機械地套用for語句的一般使用方法,導致重復定義,但本來感覺應該是可以的,畢竟是同一個名稱,但在提醒錯誤後又一想,int是用來聲明一個新變量的,在第二次使用時,系統認為你要定義新的變量,但名稱相同,故錯誤。
  • 問題四:pp66編譯運行成功之後,並沒有如願擲100次骰子,實際只運行一次。如圖
    技術分享圖片

  • 問題四解決:檢查代碼後發現是由於for語句之後沒有加“{}”,所以直接執行一次循環語句之後就輸出了正面背面的次數並結束了程序。加上“{}”之後,便可以正常循環,循環完畢之後才輸出。
  • 問題五:pp66運行後結果如圖,循環次數的總和是101
    技術分享圖片

  • 問題五解決:循環次數計算錯誤,改為如下圖後,正好滿足100次。當begin=0時,進行第一次操作所以當begin=99時進行第100次,將判斷條件改為“begin<100”則正確,之前錯誤的原因是這裏“begin<=100”,忽略了等於0時要運行一遍。
    技術分享圖片

代碼托管

技術分享圖片

上周考試錯題總結

  • 錯題一:In order to preserve encapsulation of an object, we would do all of the following except for which one? Make the class final
  • 錯題一解析:這道題誤認為把類封裝了就可以保護類中的所有。封裝意味著該類包含操作數據所需的數據和方法。為了正確保存封裝,實例數據不應該從類之外直接訪問,因此實例數據是私有的,方法被定義為訪問和操作實例數據。此外,訪問和操作實例數據的方法被公開,以便其他類可以使用該對象。“final”這個詞是用來修飾的。類的方法設為private沒有關系。
  • 錯題二:Interface classes cannot be extended but classes that implement interfaces can be extended.false
  • 錯題二解析:任何類都可以繼承,無論它是一個接口,實現一個接口,還是兩者都不能。唯一的例外是,如果對類進行了顯式修改,使用了“find”一詞,在這種情況下,它不能繼承。
  • 錯題三:Inheritance through an extended (derived) class supports which of the following concepts?code reuse
  • 錯題三解析:通過擴展一個類並從中繼承,新類不需要重新實現任何繼承的方法或實例數據,代碼重用是為了重用其他的代碼的能力,通過繼承它來滿足的需要。
  • 錯題四:Static methods cannot reference non-static instance data
  • 錯題四解析:實例數據包含靜態和非靜態的,故實例數據可以引用靜態方法。
  • 錯題五:Every class definition must include a constructor.false
  • 錯題五解析:java允許在沒有構造函數的情況下定義類,但是在這種情況下使用了默認構造函數。
  • 錯題六:All objects implement Comparable. false
  • 錯題六解析:這道題目錯在理解吧。可比較的是一個接口,類必須定義compareto方法並明確聲明它實現的可比較的是可比較的實現。大多數類沒有實現可比較的。
  • 錯題七:A method defined in a class can access the class‘ instance data without needing to pass them as parameters or declare them as local variables. true
  • 錯題七解析:實例數據對所有類的方法都是全局可用的,因此這些方法不需要接收它們作為參數或在本地聲明它們。如果與實例數據同名的變量在方法中本地聲明,那麽實例數據將“隱藏”在該方法中,因為引用將是本地變量。
  • 錯題八:Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by implementing interfaces
  • 錯題八解析:因為一個類可以實現任意數量的接口,所以這個類在本質上使用接口類,就好像那些接口是在這個類中定義的。因此,這個類繼承了接口的方法和常量。此外,該類可以擴展另一個類,從而直接或間接地從多個類繼承。這與多重繼承並不完全相同,但它與java接近。
  • 錯題九:All Java classes must contain a main method which is the first method executed when the Java class is called upon. false
  • 錯題九解析:只有驅動程序需要一個主方法。驅動程序是首先在任何java程序中執行的程序(apppls除外),但它可能會根據需要調用其他類,而其他類不需要主要方法。
  • 錯題十:The expressions that are passed to a method in an invocation are called. actual parameters
  • 錯題十解析:方法使用的是實際參數,聲明變量時使用的才是形式參數。

其他

這周我犯了一個致命的錯誤,在把所有的代碼push到碼雲上之後,由於commit不盡人意,於是便把他們全部刪除了,再次push時出現了問題,導致所有代碼都沒有了???,就在那個深夜,偉大的我把代碼刪的幹幹凈凈後,懷著一顆哇涼哇涼的心久久不能入睡...又懷著一顆哇涼哇涼的心上了一天課後——終於!!!晚自習時王老師給我找回來了代碼!通過這件事情我深刻地意識到以後不能亂刪東西,或者刪之前都留個備份,否則可能有令人窒息後果。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一周 93/93 1/1 20/20
第二周 305/398 1/2 20/38
第三周 328/651 2/4 25/60
第四周 1013/1689 1/5 30/90
第五周 795/2407 1/6 30/120

參考資料

  • Java程序設計教程(第八版)

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