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

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

primitive arch 虛擬機 聲明 cts return != 一起 replace

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

教材學習內容總結

  • 類與對象:類是對象的藍圖,對象的狀態由對象的屬性值確定,對象的屬性由類中所聲明的方法定義,對象的行為由對象可執行的操作決定,對象的操作由類中聲明的方法定義,對象的操作可能改變該對象的狀態。
  • 構造方法的類名和方法名相同;toString方法用來獲得被輸出對象的字符串形式的描述。
  • 每個對象都有自己的狀態,因為每當創建類的一個實例時,新的內存空間將分配給該變量。
  • UML類圖代表統一建模語言,對類和對象間的關系進行可視化描述。
  • 可見性修飾符

    public private
    變量 違反封裝性 強化封裝性
    方法 為客戶提供服務 為類中其他方法提供支持
  • 訪問器方法:getX; 修改器方法:setX。
  • 靜態變量由所有實例共享,可以通過類名稱來調用。
  • 類之間的關系分為依賴、聚合和繼承,依賴關系指一個類需要調用另一個類或者一個類的的對象與本類其他對象的交互;聚合關系是依賴關系的特殊類型,類A被類B定義為類B的一部分時,類B就是聚合類。
  • 代碼分為偽代碼,產品代碼和測試代碼。

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

  • 問題一:靜態變量與實例變量的區別
  • 問題一解答:靜態變量前要加static關鍵字,而實例變量前不用加;實例變量屬於某個對象的屬性,而靜態變量屬於類,故也成類變量;實例對象必須創建某個對象後通過這個對象來使用,而靜態變量可以直接使用類名來調用。參考:http://developer.51cto.com/art/201107/275079.htm
  • 問題二:不知道return的作用是什麽。
  • 問題二解答:一個被調用的方法可能返回一個值,該方法計算得到一個值,然後將這個值提供給調用它的方法,return用於指定從方法中返回的值。在有返回值的類型中,return用來返回指定方法的值,在無返回值(void)的類型中用來結束方法的執行。參考:(https://www.cnblogs.com/zhang-qiang/archive/2011/05/17/2048275.html)
  • 實參和形參的區別是什麽
  • 實參為調用方法時傳遞給方法的實際值,形參是方法聲明頭中的相應變量。

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

  • 問題一:代碼編譯時錯誤提示找不到符號,如圖

    技術分享圖片

  • 問題一解答:查找資料發現,這種問題一般是拼寫錯誤導致的,還有可能是因為沒有編譯完。同時,在查找資料的過程中get新技能:

    如果你一定要把不同的類放在不同的文件裏編譯的時候最好先編譯main方法所在的類
    還有編譯的時候可以同時編譯多個類,比如:JAVAC A.java B.java C.java

  • 問題二:錯誤提示無法將類應用到給定類型,如圖

    技術分享圖片

  • 問題二解答:我的錯誤代碼為:
    技術分享圖片
    技術分享圖片
    給出的原因是實際參數列表和形式參數列表長度不同。當時請教了蔣子行同學,他給出的問題原因是RollingDice利用ParOfDice類時,方法不對,die1 = new PairOfDice()Public PairOfDice()是對應一致的,之後理解為父類構造器寫了帶參數的構造器,調用子類構造器的時候子類構造器中沒有,虛擬機發現子類的構造器參數列表與父類構造器參數列表不同,就會提示錯誤。改正之後在父類改為無參的構造器,調用子類構造器的時候,兩者具有了相應的屬性和方法,便可以正常運行了。改正之後如圖:

    技術分享圖片

  • 問題三:在做書上例題PP4.5時,輸出布爾值的部分總是null,如圖:
    技術分享圖片

  • 問題三解答:這就關系到對布爾值的理解方面了,我錯誤的認為布爾值需要輸出true 或者false,但實際上,定義一個布爾值A後,根據設定的判斷條件,只會輸出true 或者false,不需要額外定義。但是在更正之後還是錯誤的,如圖
    技術分享圖片

    然後我發現最後return寫錯了,因為當時也沒有完全理解return的用法,把return isAntique改為return judge就對了。
    技術分享圖片

  • 問題四:如下程序運行錯誤,!與=之間如果有空格就是錯誤的,連在一起就對了。
    技術分享圖片
    技術分享圖片

    改為這樣就對了
    技術分享圖片

  • 問題四解答:當時感覺空格的影響力不應該有這麽大,應該是其他地方有什麽問題,同時上網查找資料也沒有得到有關“!”和“=”的運行錯誤,便把他記錄下來,後來得知"!="的含義是“不等於”,必須連在一起,是一個符號,所以不可以亂加空格。
  • 問題五:顯示錯誤方法聲明無效
    技術分享圖片

  • 問題五解答:當看到聲明錯誤時,總也找不出問題在哪裏,感覺語法沒有錯誤,在這個問題上糾結了很久,最後發現是問題類名缺少字符,在編寫Account2.java時,部分過程沒有加“2”,這也是一個輸入錯誤。

    代碼托管

    技術分享圖片

上周考試錯題總結

  • 錯題一: In Java a variable may contain
    a value or a reference

    分析:變量包括一個值或者引用。變量代表保存數據的內存單元,可為其賦值

  • 錯題二:What is the function of the dot operator?
    It allows one to access the data within an object when given a reference to the objectIt allows one to invoke a method within an object when given a reference to the object

    分析:點可以用來調用方法,也可以在引用對象時獲得訪問數據的權利。

  • 錯題三:Which of the following will yield a pseudorandom number in the range [ -5, +5 ) given the following:
    Random gen = new Random( );
    gen.nextFloat( ) * 10 - 5

    分析:這道題目錯誤的原因是沒有註意過書上的float nextFloat()方法。把它當做了int nextInt()來做,從而選擇錯誤。

  • 錯題四:Consider the following two lines of code. What can you say about s1 and s2?
    String s1 = "testing" + "123";
    String s2 = new String("testing 123");
    s1 and s2 are both references to different String objects

    分析:我知道這道題目的做法,但是忽略了中間的空格,錯誤的認為兩者相等。String類無需顯式的使用new運算符及調用構造方法來創建對象。

  • 錯題五:The String class‘ compareTo method
    yields 0 if the two strings are identical

    分析:這個問題是int compareTo(String str)方法的定義,本字符串按字典順序等於str對象時返回一個整型值0;先於返回負值,後於返回正值。

  • 錯題六:The advantages of the DecimalFormat class compared with the NumberFormat class include
    precise control over the number of digits to be displayedcontrol over the presence of a leading zero

    分析:雖然DecimalFormat比NumberFormat提供了更多的控制,但是通過一個或多個數學方法將截斷保留在程序員手中。%符號將出現在顯示的末尾而不是開始。

  • 錯題七: When comparing any primitive type of variable, == should always be used to test to see if two values are equal. false

    分析:這適用於int、short、byte、long、char和boolean,而不是double或float變量。如果兩個雙變量x和y正在被測試,(x == y)只有當它們恰好等於最後一個小數點時才是正確的。相反,比較這兩個值是很常見的,但是允許在值上有細微的差別。例如,如果= 0.000001,我們可以通過(x - y <=)來測試x和y,而不是(x == y)來得到一個更好的概念,如果它們足夠接近,可以被認為是相等的。

  • 錯題八:You may use the String replace( ) method to remove characters from a String. false

    分析:這個方法僅適用於單個的字符的替換,並不會在字符串中增添或者刪減字符。

  • 錯題九: If you need to import not only the top-level of a package, but all its secondary levels as well, you should write: import package..; false

    分析:應該是在後面加一個,代表所有的, 如 import package.A.;

其他

這周的代碼量相較於之前有所增加,所以在編譯運行的時候經常因為拼寫錯誤報錯,遇到最多的問題也是因為這個,糾正的時候也挺麻煩的。同時感覺這兩章的內容還沒有學好從測驗中也能看出來我還會繼續學習,做一些課後練習,不能就這麽過去了,這樣在之後的學習中也會受到影響。但這周較之之前代碼量有所提高,以後會繼續提升的。

學習進度條

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

參考資料

  • 找不到符號
  • return用法
  • 靜態變量與實例變量的區別

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