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

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

教材學習內容總結

  • 1.數組:是一種可將數據分組爲數據表的編程結構,其含有多個值,而且每一個值都有固定的編號,稱爲索引或者下標。具備N個值的數組索引爲0~(N-1)。
    訪問每一個數組的方法時:數組名[索引值]
  • 2.  ☆聲明和使用數組:數組在java中是對象,因此必須聲明數組引用變量,而後用new運算符實例化數組,爲數組分配保存值的空間。
    保存在一個數組中的全部值,具備相同的類型,至少應該是可兼容的類型。
    for循環的迭代器版用於輸出數組的值。在全部java運算符中,[ ](索引運算符)具備最高的優先級。
      ☆邊界檢查:在編寫程序時,須要注意將數組的索引值控制在有效範圍以內,不然會拋出異常。
    length常量是每一個數組的組成部分,所以每當須要查看數組長度時就能夠直接使用而不須要定義一個常量。
      ☆數組聲明方式:兩種方式,方括號和數組元素類型相關聯或者方括號和數組相關聯。(實際上對計算機而言沒有差異,可是第一種符合咱們的慣性思惟)
      ☆數組初始值表:初始值表能夠用於實例化一個數組對象,併爲數組中的每個元素提供初始值。初始值表中的各項數據用逗號隔開,應以花括號終結。初始值表只能在數組的第一次聲明時使用。
      ☆數組做爲參數:整個數組能夠做爲參數傳遞給一個方法,使得方法的形參成爲原始數組的別名。
  • 3.對象數組:實例化對象數組只是爲了保存對象引用而預留空間,對每一個元素所表明的對象必須分別實例化。
    ☆擴大數組空間方法:首先建立一個大小爲n倍當前的數組的新數組,而後將當前數組中的每一個值複製到新數組中去,最後將集合的引用設置爲新數組引用。
  • 4.命令行形參:將程序編譯時,解釋器將調用其main方法。String[ ]參數稱爲命令行實參,在調用解釋器時將提供給程序。其實就是調用解釋器時關於命令行的信息將存放在args數組中供程序使用。
    命令行實參是給程序提供輸入信息的另外一種方式。
  • 5.可變長度參數表:方法重載能夠實現參數數量輸出任意可控制,可是必須知道最多參數的個數不太方便。
    另外一種很好的方法是定義一個接受整型數組參數的方法,每次調用方法時數組的長度能夠不一樣,要求在調用方法中先將整型值組織成數組,而後將數組做爲一個參數傳給被調用方法。
  • 6.二維數組與多維數組:二維數組中使用兩個索引值,外循環次數由表明行數的數組.length控制,內循環次數由數組[行].length。二維數組也可使用初始值表實例化,初始值表中的每個元素自己就是一個一維的初始值表。多於一維的數組稱爲多維數組。html

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

  • 問題1:看書251頁時,對書上所提到的內容不理解java

    將一個數組做爲參數的方法能夠實際改變改數組元素,由於該方法引用的是原始數組的元素值。但該方法不能改變數組引用自己,由於它接受的參數是原始數據引用的副本。這個規則與管理任何對象類型的規則一致。git

  • 1.(〃'▽'〃)本題解答:這篇博客講述了數組做爲參數和返回值,這篇博客說了值傳遞和數組傳遞的區別
    使用值傳參(pass_by_value)的方式來傳遞函數參數,只是值傳遞方式在處理原始數據類型參數與引用類型參數時候有不一樣,若是一個參數是原始數據類型,那麼參數變量的值傳遞進去。若是是引用類型,是傳進了引用變量的值(也就是說,只是將指向數據的引用的值給傳進去了,也就是被調用的函數新建的空間放的是這個引用的值,那麼也就是也指向了數組存在的內存),因此一樣是值傳遞,引用類型的傳入的固然是引用變量的值,指向了同一數組,那麼函數內對數組進行的修改在函數退出後依舊是有效的。
  • 問題2:在作SR8.18時不知道用什麼方法輸出命令行實參值。
  • 2.(〃'▽'〃)本題解答:先翻看了課後答案。上面表示要用包裝器類Integer的方法。
  • 問題3:public static int add(int...a)與public static int add(int[] a)和public static int add(int a[])有什麼不一樣?
  • 3.(〃'▽'〃)本題解答:這個恰好找到的很切合問題。

    編程

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

  • 問題1:在作命令行參數時沒法輸入。
  • 1.(〃'▽'〃)本題解答:在參看同窗的博客後,對此問題有了解決方案數組

  • 問題2:8.1作的時候一直出錯。原來的代碼
  • 2.(〃'▽'〃)本題解答:實際上是由於在循環以後加的if條件語句,這樣的話會形成邏輯錯誤。
  • 問題3:在作pp8.5的時候不太懂,詢問了郭愷思路,本身動手實踐了 一下,發現我建立的數組實際上是空的,x1~xn的值我並無實例化,因此仍是不成功的。
    markdown

  • 3.(〃'▽'〃)本題解答:找了編程能力很強的郭愷同窗,他指出問題:是要讓用戶輸入x1~xn的具體數值並讓其保存在所建立的數組裏面,使用for循環結構就能很好的解決問題。
  • 問題4:在pp8.5中出現我輸入n爲2(讓用戶輸入兩個值)可是用戶能夠輸出三個值,因此就困在了那裏。
  • 4.(〃'▽'〃)本題解答:後來發現是個人for循環中的判斷語句有問題。因此應該將<換成<=。數據結構

代碼託管

上週考試錯題總結

  • 問題1: 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?(下面哪個程序知足若是x是正數則加一,是負數則減一,是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--;
  • 問題1分析和領悟:若是x是正的,x++是在x=-x時執行的,不然,什麼都不會發生,或者x不受影響。在A、C、D和E中,邏輯是不正確的。在A x中,若是x不是正的,那麼若是x=0,x變成-1,這是錯誤的答案。在C中,若是x是正的,那麼就執行x++。在任何一種狀況下,下一個語句都被執行,若是x不是負數,則執行else子句設置x爲0。因此若是x是正的,在這組代碼以後它就變成了0。在D、x++和x中——若是x不是0,都是執行的。在E中,這段代碼並無試圖肯定x是否爲正仍是負。
  • 問題2:Assume that count is 0, total is 20 and max is 1. The following statement will do which of the following? if (count != 0 && total / count > max) max = total / count;(假設計數爲0,總數爲20,最大值爲1。下面的語句將會執行下列哪一項?if(count!=0&&total/count max)max=total/count;)
    A . The condition short circuits and the assignment statement is not executed(A。條件短路和賦值語句未執行)
    B . The condition short circuits and the assignment statement is executed without problem(b。條件短路和賦值語句是無問題的執行的)
    C . The condition does not short circuit causing a division by zero error(c。這種狀況不存在短路引發的零偏差)
    D . The condition short circuits so that there is no division by zero error when evaluating the condition, but the assignment statement causes a division by zero error(d。條件短電路,在評估條件時沒有零偏差,可是賦值語句致使了零偏差的除法)
    E . The condition will not compile because it uses improper syntax(由於它使用了不正確的語法,因此這個條件不會被編譯)
  • 問題2分析和領悟:由於count是0,(count!=0)是假的。由於&&條件的左邊是假的,條件是短路的,因此右邊沒有被求值。所以,避免了一個潛在的零錯誤。因爲條件爲假,因此語句max=total/count沒有執行,再次避免了零錯誤的潛在劃分。
  • 問題3:When comparing any primitive type of variable, == should always be used to test to see if two values are equal.(當比較任何原始類型的變量時,==應該老是用來測試兩個值是否相等。)
    A . true(真)
    B . false(假)
  • 問題3分析和領悟:==用於測試兩個值是否相等這種說法適用於int、short、byte、long、char和boolean,但不能是double或float變量。若是兩個double型變量x和y正在被測試,(x==y)只有當它們徹底等於最後一個小數點時才成立。相反,比較這兩個值是很常見的,可是容許在價值上有細微的差異。例如,若是THETA=0.000001,咱們能夠經過(x-y<=THETA)來測試x和y,而不是(x==y),以便更好地瞭解它們是否足夠接近,能夠被認爲是相等的。
  • 問題4:If a switch statement is written that contains no break statements whatsoever,(若是一個switch語句中不含break會怎樣?)
    A . this is a syntax error and an appropriate error message will be generated(這是一個語法錯誤,將生成一個適當的錯誤消息)
    B . each of the case clauses will be executed every time the switch statement is encountered(每當遇到switch語句時,都會執行每一個case子句)
    C . this is equivalent to having the switch statement always take the default clause, if one is present(這等價於交換語句老是取默認的子句,若是有的話)
    D . this is not an error, but nothing within the switch statement ever will be executed(這不是一個錯誤,可是switch語句中的任何東西都不會被執行)
    E . none of the above (沒有正確答案)
  • 問題4分析和領悟: 儘管寫這樣的switch語句是不習慣的,可是是合法的。switch語句執行的常規規則適用於在交換表達式表達式後執行匹配的case子句。在此以後,全部後續的條款都是按順序執行的,由於沒有中斷語句來終止開關/案例的執行。
  • 問題5:The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operator as(這個語句if(x<0);y=x;else y=0,能用其餘條件重寫的是?)
    A . y = (x < 0) ? x : 0;
    B . x = (x < 0) ? y : 0;
    C . (x < 0) ? y = x : y = 0;
    D . y = (x < 0);
    E . y = if (x < 0) x : 0;
  • 問題5分析和領悟: 在這種狀況下,Java測試一個條件(x<0)的條件操做符,若是是真的,則返回x,若是爲false,則返回0。原始if語句是將y賦值爲x if(x<0)和0。這將經過將y賦值爲x或0來完成(x<0),如A.在B中所示,x被賦值爲y或0的值,這是向後的。在D中,y將被設置爲真或假,取決於(x<0),而E中的語句在語法上是無效的。
  • 問題6: Which of the following statements are true about Java loops?
    A . all three loop statements are functionally equivalent(全部三個循環語句在功能上是等價的)
    B . while loops and do loops are essentially the same; but while loops always execute at least once(循環和循環本質上是相同的;可是循環老是至少執行一次)
    C . if you know the number of times that a loop is to be performed, the best loop statement to use is a while loop(若是您知道要執行環路的次數,那麼使用的最佳循環語句是while循環)
    D . loops may be replaced by an appropriate combination of if-else and switch statements(循環可能被一個適當的if-else和switch語句的組合所取代。)
    E . none of the above(以上都不是)
  • 問題6分析和領悟: 答案選擇A。在Java中,就像在大多數語言中同樣,循環語句基本上都是等價的(幾乎能夠互換)。它們的主要差別是與什麼時候評估控制條件以及是否有用於遞增/更新的語法有關。
  • 問題7:The following for-loop is an infinite loop.(下面這個程序是個死循環)
    for (int j = 0; j < 1000; ) i++;
    A . true(真)
    B . false(假)
  • 問題7分析和領悟:這個循環初始化j到0並將其與1000進行比較,可是在每次循環迭代以後不會改變 i 的值。在現實中,一旦變得太大,沒法存儲在內存中,循環就會終止,但邏輯上,這是一個無限循環。

點評模板:

  • 博客中值得學習的或問題:
    • (20172304)markdown格式漂亮,總結清晰明瞭。缺點是問題不是很深入,輸入錯誤有點重複。
    • (20172301)markdown格式漂亮,總結頗有深度。總之沒有什麼問題,值得我好好學習。
  • 代碼中值得學習的或問題:
    • 兩個夥伴都是one thing one commit,因此這點很須要學習,這周我也這樣作了,可是不如他們作的認真仔細。
    • 在編程項目中,我尋求了不少的幫助,佔用了他們不少時間幫我解決問題,因此我以爲我應該養成獨立思考的好習慣,雖然討論很好,可是多度的小問題讓我以爲在學習上太過於依賴夥伴,不只拖慢他們的進度並且對學習益處不大。
    • 在編程問題上,他們有很縝密的思惟邏輯和很細心的結構設計,在這點上我以爲本身簡直太差了,不少問題本身天馬行空,想法不成體系,漏洞滿滿,所以在之後的學習中要養成在紙上作提綱性結構的工做。app

      點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172301
    • 20172304
    • 結對學習內容
      • 學習第八章pp項目。
      • 學習數組的具體內容

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

這周的任務量不大,但學習的內容不是很好掌握。當我看完書後,感受大勢在握的時候,8.1卡了我兩個小時,一直顯示錯誤。終於在仇夏同窗的幫助下發現8.1的循環錯誤,成功解決後卻發現8.5嘲笑我蚍蜉撼樹,心態有點複雜。因此我以爲:在理解的同時仍是得去往實踐的路上走的,雖然走的有些蹣跚,可是要一直一直繼續走;可能速度不快,但必定要一直在路上。感謝幫助我學習的好朋友們,在學習java之路上咱們一塊兒加油!Fighting!函數

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 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
第六週 729 /3459 1/7 40/172

參考資料

1.數組做爲函數參數
2.java程序設計教材(第八版)
3.藍墨雲班課oop

相關文章
相關標籤/搜索