20172328《程序設計與數據結構》第五週學習總結

20172328李馨雨《程序設計與數據結構》第五週學習總結

教材學習內容總結

第五章:條件循環和判斷

  • 1.布爾表達式(boolean型,只有兩種結果ture或false),也就是條件。控制程序執行流程的語句分爲兩類:條件語句和循環語句。
  • 2.條件語句主要有if語句、if-else語句、switch語句。 循環語句主要有while語句、do語句、for語句。
    for語句:
  • 3.相等性運算符(==、!=)和關係運算符(< 、<=、 >、 >=)和邏輯運算符(!、&&、||),運算順序從高到低分別是:算術運算符➷相等性或關係運算符➷邏輯非➷邏輯與➷邏輯或
  • 4.瞭解應用if語句、if-else語句、語句塊(else語句只包含第一條語句)、if語句的嵌套。
  • 5.數據比較中學習了浮點數的精確比較:計算兩個數差的絕對值並將差和某個偏差標準比較Math.abs(r1-r2)<0.0001,接近即認爲相等,字符比較:Unicode字符集定義了java中字符的相對順序,因此用unicode值比較,字符串比較:String類提供的方法compareToint compareTo(String str),還有equals方法String1.equals(String2))對象比較(用implements Comparable接口)。
  • 6.while語句和嵌套循環,break語句和continue語句。
    嵌套循環:一條if語句嵌入到另外一條if語句中。
    break語句:執行break語句將當即跳轉到控制當前執行語句以後繼續執行。
    continue語句:循環控制條件將繼續被計算。
  • 7.迭代器概念(迭代器是一種對象,該對象提供了一些方法有助於一次處理某個集合),迭代器對象的基本方法(hasNext)、讀取文本文件(新瞭解了Scanner的方法,即讀取和處理文件方法)
  • 8.ArrayList類,其爲管理對象集的一個類。爲ArrayList對象指定索堡村元素的類型,能使編譯器幫助程序員檢查並保證只有合適類型的對象能夠保存在列表中。html

    第六章:其餘條件判斷和循環

  • 1.switch語句(先計算一個表達式的值,而後將該值和幾個可能的case子句進行匹配。break語句一般用來退出switch語句中的各個case語句),switch語句隱含的布爾條件是基於相等性的。
    格式:
switch(布爾表達式)
{ 
   case A :
       語句/語句塊;
    break;
   case B:
        語句/語句塊;
    break;
 .............
    default :
         語句/語句塊;
}
  • 2.條件運算符(三元運算符,須要三個操做數(?:),條件運算符對較短表達式進行運算並返回結果)
    例: System.out.println("The value is" + ((value<=10)?"not" : " ") + ""greater than 10");
  • 3.do語句(do循環的循環體至少會執行一次)java

  • 4.for語句(for語句一般用於已知循環執行次數的狀況,for循環的控制頭包含由分號隔開的三部分,初始化、布爾表達式、增量)
  • 5.for-each循環(有助於處理迭代器問題)
  • 6.各類循環的比較(要讓循環體至少執行一次,就用do循環。for循環更傾向於知道循環次數,while循環在開始前先判斷表達式初始值。)git

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

  • 問題1:應該如何使用塊語句來創造條件語句?
  • 1.(〃'▽'〃)本題解答:塊語句將一組語句組織爲語法意義上的一條語句。當須要在一個布爾條件的控制下處理較多的事物時,能夠用塊語句定義if語句的if塊或者定義循環語句的循環體。
  • 問題2:在作SR5.23時,程序沒法正常運行,會一直出現死循環。
  • 2.(〃'▽'〃)本題解答:通過老師的幫助和修改,發如今定義變量時的錯誤。
  • 問題3:不理解迭代器。
  • 3.(〃'▽'〃)本題解答:百度到的,而後能夠進一步理解。程序員

    迭代器(iterator)是一種對象,它可以用來遍歷標準模板庫容器中的部分或所有元素,每一個迭代器對象表明容器中的肯定的地址。迭代器修改了常規指針的接口,所謂迭代器是一種概念上的抽象:那些行爲上像迭代器的東西均可以叫作迭代器。然而迭代器有不少不一樣的能力,它能夠把抽象容器和通用算法有機的統一塊兒來。
    迭代器提供一些基本操做符:*、++、==、!=、=。迭代器是個所謂的複雜的指針,具備遍歷複雜數據結構的能力。其下層運行機制取決於其所遍歷的數據結構。所以,每一種容器型都必須提供本身的迭代器。事實上每一種容器都將其迭代器以嵌套的方式定義於內部。所以各類迭代器的接口相同,型號卻不一樣。這直接導出了泛型程序設計的概念:全部操做行爲都使用相同接口,雖然它們的型別不一樣。算法

  • 問題4:switch語句中沒有String類型,運算結果不能爲float型或者boolean型。並且,每個case子句中的表達式必須爲常量,不能爲變量或其餘表達式。
  • 4.(〃'▽'〃)本題解答:編程

    switch(A),括號中A的取值只能是整型或者能夠轉換爲整型的數值類型,好比byte、short、int、char、還有枚舉;須要強調的是:long和String類型是不能做用在switch語句上的。markdown

    case B;case是常量表達式,也就是說B的取值只能是常量(須要定義一個final型的常量,後面會詳細介紹緣由)或者int、byte、short、char(好比一、二、三、200000000000(注意了這是整型)),若是你須要在此處寫一個表達式或者變量,那麼就要加上單引號; case後的語句能夠不用大括號,就是C不須要用大括號包裹着;數據結構

    default就是若是沒有符合的case就執行它,default並非必須的.app

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

  • 問題1:在嘗試SR2.22時出現了無限循環ミ゚Д゚彡我當時機智的按了ctrl+c,雖然終止了瘋狂的彈幕,可是終究沒有解決問題。

  • 1.(〃'▽'〃)本題解答:通過反反覆覆、反反覆覆的檢查。終於發現我應該刪掉else,這樣才能保證程序繼續進行下去。這個錯誤告訴我一個道理,有if 不必定得有 else。
  • 問題2:在作pp5.1時 出現了意外的類型,個人求餘運算符不能成功。後來我把「=」改爲了「==」就可以很好的運行了,可是不知道原理。下圖是作的過程。

    改完以後的成功。
  • 2.(〃'▽'〃)本題解答:尋問了老師,老師說:一個=表明賦值,兩個表明判斷是否相等。(感受上次上課的時候講過,嘖嘖,我幹了些什麼趕快拿小本子記下來記下來。)
  • 問題3:在作pp5.7時,遇到了沒法重複執行的瓶頸,編譯都是成功的,可是隻能進行一次,不能讓遊戲繼續下去。


    編輯器

  • 3.(〃'▽'〃)本題解答:通過與同窗們的討論和理解,最後蔣子行同窗的提出Scanner將對象建立兩個就能夠循環執行,問題就解決了,雖然能夠這樣作,可是我仍是不太懂緣由。後面我去問王老師,他告訴我在最後的nextLine中輸出\t,因此會直接跳過判斷,因此只建立一個對象,可是在最後一行復寫一遍末尾語句就能解決。

代碼託管

上週考試錯題總結

  • 問題1: The behavior of an object is defined by the object's
    A . instance data
    B . constructor
    C . visibility modifiers
    D . methods
    E . all of the above
  • 問題1分析和領悟:這些方法規定了對象在傳遞消息時的反應。每條消息都是做爲一個方法實現的,方法是在傳遞消息時執行的代碼。構造函數是這些方法中的一種,可是全部的方法組合在一塊兒決定了行爲。可見性修飾符會間接地影響對象的性能。因此選擇D。
  • 問題2:In order to preserve encapsulation of an object, we would do all of the following except for which one?
    A . Make the instance data private
    B . Define the methods in the class to access and manipulate the instance data
    C . Make the methods of the class public
    lD . Make the class fina
    E . All of the above preserve encapsulation
  • 問題2分析和領悟:封裝意味着該類包含了操縱數據所需的數據和方法。爲了正確地保存封裝,實例數據不該該直接從類以外訪問,所以實例數據是私有的,而且定義了方法來訪問和操縱實例數據。此外,訪問和操縱實例數據的方法被公開,以便其餘類可使用該對象。保留的單詞「final」用於控制繼承,與封裝沒有任何關係。
  • 問題3:A variable whose scope is restricted to the method where it was declared is known as a(n)
    A . parameter
    B . global variable
    C . local variable
    D . public instance data
    E . private instance data
  • 問題3分析和領悟:局部變量是那些被聲明的方法「本地」的變量,也就是說,它們只能在那個方法中訪問。全局變量是那些能夠從任何地方訪問的變量,而參數是傳遞給方法的變量。實例數據能夠被看做是整個對象的全局變量。
  • 問題4: A class' constructor usually defines
    A . how an object is initialized
    B . how an object is interfaced
    C . the number of instance data in the class
    D . the number of methods in the class
    E . if the instance data are accessible outside of the object directly
  • 問題4分析和領悟: 構造器應該用於「構造」對象,也就是說,用來設置實例數據的初始值。這不是必需的,但一般是這樣作的。對象的接口是由在實例數據和方法上使用的可見性修飾符所決定的。
  • 問題5: Instance data for a Java class
    A . are limited to primitive types (e.g., int, float, char)
    B . are limited to Strings
    C . are limited to objects(e.g., Strings, classes defined by other programmers)
    D . may be primitive types or objects, but objects must be defined to be private
    E . may be primitive types or objects
  • 問題5分析和領悟: 實例數據是組成該類的實體,多是任何可用的類型,不管是原始的仍是對象的,多是公有的仍是私有的。經過使用對象做爲實例數據,它容許將類構建在其餘類之上。這種關係中,類擁有其餘類的實例數據,稱爲has-a關係。
  • 問題6: Consider a Rational class designed to represent rational numbers as a pair of int's, along with methods reduce (to reduce the rational to simplest form), gcd (to find the greatest common divisor of two int's), as well as methods for addition, subtraction, multiplication, and division. Why should the reduce and gcd methods be declared to be private.
    A . Because they will never be used
    B . Because they will only be called from methods inside of Rational
    C . Because they will only be called from the constructor of Rational
    D . Because they do not use any of Rational's instance data
    E . Because it is a typo and they should be declared as public
  • 問題6分析和領悟: 被聲明爲私有的類的全部條目只能被該類中的實體訪問,無論它們是實例數據仍是方法。在這種狀況下,因爲這兩種方法只從Rational的其餘方法(包括構造函數)調用,因此它們被聲明爲私有,以促進信息隱藏在更大的程度。注意,答案C不是一個正確的答案,由於reduce方法調用gcd方法,因此其中一個方法是從構造函數之外的方法調用的。
  • 問題7:Consider a method defined with the header: public void doublefoo(double x). Which of the following method calls is legal?
    A . doublefoo(0);
    B . doublefoo(0.555);
    C . doublefoo(0.1 + 0.2);
    D . doublefoo(0.1, 0.2);
    E . all of the above are legal except for D
  • 問題7分析和領悟: 在A的狀況下,值0(整數)被擴展爲double。在C的狀況下,增長的是0.3,而後調用doublefoo。D中的參數列表是非法的,由於它包含兩個雙參數,而不是1。
  • 問題8: What happens if you declare a class constructor to have a void return type?
    A . You'll likely receive a syntax error
    B . The program will compile with a warning, but you'll get a runtime error
    C . There's nothing wrong with declaring a constructor to be void
    >>D . The class' default constructor will be used instead of the one you're declaring
    E . None of the above
  • 問題8分析和領悟: 在添加一段有void的構造函數後會將其語段自動當作了一個方法。因此選D
  • 問題9: Every class definition must include a constructor.
    A . true
    B . false
  • 問題9分析和領悟: Java容許在沒有構造函數的狀況下定義類,然而,在這種狀況下有一個默認的構造函數。
  • 問題10:Static methods cannot
    A . reference instance data
    B . reference non-static instance data
    C . reference other objects
    D . invoke other static methods
    E . invoke non-static methods
  • 問題10分析和領悟:靜態方法是一種方法,它是類自己的一部分,而不是實例化的對象,所以靜態方法是在類的全部實例化對象之間共享的。因爲靜態方法是共享的,因此它不能訪問非靜態實例數據,由於全部非靜態實例數據都是特定於實例化的對象。靜態方法能夠訪問靜態實例數據,由於像該方法同樣,實例數據在類的全部對象中共享。靜態方法也能夠訪問傳遞給它的參數。
  • 問題11:Inheritance through an extended (derived) class supports which of the following concepts?
    A . interfaces
    B . modulary
    C . information hiding
    D . code reuse
    E . correctness
  • 問題11分析和領悟:經過延長一個類並繼承它,新類沒必要從新實現任何繼承的方法或實例數據,從而爲程序員節省了一項工做。所以,代碼重用是一種重用其餘人的代碼的能力,它能夠爲你的須要擴展它。

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

  這周學習內容和高中數學中的算法語句實際上是同樣的,高中學習時只看中邏輯性。在真正瞭解到編程後。才能明白其實用性,才能更理性的看待各類app什麼的小bug。這學期好忙,可是必定不能放棄java的學習。哼哼哈嘿,繼續努力!!!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 100/100 1/1 15/15
第二週 377/477 1/2 20/35
第三週 280/757 2/4 22/57
第四周 973/1730 1/5 35/92
第五週 1000/2730 1/6 40/132

參考資料

1.java中switch語句詳細用法
2.java中迭代器的使用
3.java程序設計(第八版)
4.美化CSDN博客--markdown編輯器中段落縮進、換行,改變字體、字號與顏色等

相關文章
相關標籤/搜索