20172301 2017-2018-2 《程序設計與數據結構》第六週學習總結

20172301 2017-2018-2 《程序設計與數據結構》第六週學習總結

教材學習內容總結

  • 第八章是數組。那麼咱們就要清楚數組的概念html

    同一類型數據的集合,就是一個容器。java

  • 聲明數組有兩種格式
    • 元素類型[] 數組名 = new 元素類型[元素個數或數組長度];
      eg: int[] arr = new int[5];
    • 元素類型[] 數組名 = new 元素類型[] {元素,....};
      eg: int[] arr = new int[]{1,3,5,7};
      int[] arr = {1,3,5,7};
         注意:區別初始化和實例化。初始化列表時不用new,也不用指定數組的長度。
       注意:在全部的java運算符中,索引運算符「[]」有最高的優先級。
  • 對象數組:git

    實例化對象數組只是爲了保存對象引用而預留空間,對每一個數組元素所表明的對象必須分別 實例化 編程

  • 命令行實參:String[]參數(一般稱爲args)表明了命令行實參。windows

    命令行實參存儲在String對象的數組中,並將傳遞給main方法。數組

  • 可變長度參數表:
    注意幾點:
    • 多個參數的類型 能夠是基本類型或對象類型。
      eg:public void printGrades(Grade ... grades)
    • 接受可變參數的方法也能夠接收其餘的參數。
      eg: public void test(int count, String name, double ... nums)
      可變參數必須寫在形參表的最後,而且一個方法不能接收兩組可變參數。
  • 二維數組:能夠表示爲數組的數組。一個二維整型數組其實是由一維數組引用構成的一堆數組。 因此咱們能夠把二維數組拆成兩個部分進行分析,我以爲會相對簡單。數據結構

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

  • 問題1:書P246 例8.1 第一次看的時候for (int value : list)不太明白這個for循環的意思,實際上,這實際上是對上一週學習不夠透徹的緣由。
    oop

  • 問題1解決方案:這個語句的本質就是for-each語句。在第六章的時候for-each循環引用的是Iterable對象中的ArrayList對象舉例。依次輸出數組中的值,從索引0開始。因此,在學習數組的時候,要注意應用這種循環。
    參考資料:java中for循環的幾種方式
  • 問題2:書P247 邊界檢查中,"差1錯誤"
  • 問題2解決方案:書上說:學習

    這種錯誤由索引值比0小1或比(N-1)大1引發。測試

       簡單來講,就是由於索引值和長度值的關係不清形成的錯誤。咱們都知道,索引是從0開始的,而長度確定從1開始。
    那咱們看一下錯誤結果:

  • 問題3:書P248 例8.3 相信大多數人一開始看到這個例子真的很迷茫。確實很複雜。
  • 問題3解決方案:其實這個例子用到是ASCII碼中對應的數字。
System.out.print((char)(letter + 'A'))

這個是一個數字和一個字符相加,那麼就是數字和字符在其ASCII碼中的數字相加,而且強行轉換爲char類型的。 不得不感慨這個方法的構思的精巧。

  • 問題4:書P256 例8.8
if(count == collection.length)
  increaseSize();

這個是什麼意思?

  • 問題4解決方案:結合例子後的方法increaseSize()和分析,我才懂得這個是檢查當前容量是否達到了容量限制。這樣就能夠不用擔憂數組空間不足的問題。

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

  • 問題1:命令行實參例子NameTag不能運行。
  • 問題1解決方案:首先我在IDEA中編譯了程序,卻輸出了異常,緣由就是數組中沒有元素。 咱們須要在命令行下輸入參數。
    因此,我切換到虛擬機。可是卻發生了找不到類的問題。 這個後來卻本身就行了,一直找不到緣由。

  • 問題2:虛擬機登陸後藍屏。

  • 問題2解決方案:寫博客的時候準備去虛擬機上對代碼截圖。登入後發現,虛擬機屏幕變藍。沒法進行任何操做。
    嘗試了卸載重裝(聽說重裝是神技),結果也不行。
    我一開始在百度上查找虛擬機藍屏的問題,都是說的在windows下藍屏的問題。
    而後,我也以爲是無力迴天了。忽然想到我應該查一下Ubuntu系統下登陸後藍屏的問題。果真有!
    • 首先, 按下Ctrl + Alt + F4 進入一個界面。輸入用戶名和密碼,進入root模式。
    • 而後,須要安裝相應的服務而後重置。

      sudo apt-get install xserver-xorg-lts-utopic
      sudo dpkg-reconfigure xserver-xorg-lts-utopic
      reboot

    • 若是前面第一個操做有問題,須要重置 dpkg 後再試 sudo dpkg --configure -a
    • 最後,終於能夠了。
    • 此次問題,讓我有些理解。遇到問題,首先應該冷靜分析,而後針對問題給出本身的方案,而不是亂用藥,這樣不過是浪費時間乾着急而已。

參考資料:Ubuntu 登陸後圖形化界面藍屏問題

代碼託管

上週考試錯題總結

  • 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? B
    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,由於C直觀上看上去就是兩個if語句並列,而後一個else語句。很符合題意的樣子。可是要清楚計算機的語句順序。計算機不是人,不是你想啥,它也能想啥。它只會死板的認爲, else語句是和第二個if配套的,那麼題意就徹底不一樣了。不管你輸入的正數是多少,最後輸出的都是0。
因此,咱們作題編程的時候必定要當心謹慎。不要把計算機想象成一我的。要注意計算機語言的格式。就好比:咱們用計算機作乘法的時候,數學中是否是能夠省略符號,計算機中就不能夠,他不可能認爲5(4-3)是正確的。因此,咱們就應該注意是5*(4-3)

  • 下面哪一個選項是關於複選框的正確語句? E
    A。它們可能會被檢查或檢查。
    B。單選按鈕是一種特殊的複選框。
    C。它們是Java組件
    D。你能夠控制它們是否可見。
    E。上面全部的
    理解:這道題應該是超綱了吧。不過既然有提到,那我能夠看書瞭解下。
    沒怎麼看懂吧,只能大體先理解下好了。

  • 若是一個switch語句沒有包含任何break語句, E
    A。這是一個語法錯誤,將生成適當的錯誤消息。
    B。每次遇到switch語句時,都將執行每一個case子句。
    C。這等價於有switch語句老是使用默認子句,若是有的話。
    D。這不是一個錯誤,可是switch語句中的任何內容都不會被執行。
    E。以上都不是
    理解:switch語句一般狀況下應該應用break語句和default語句的,可是也有不加上以上兩個語句的狀況。因此這個是沒有語法錯誤的。若是沒有break語句,接下來,全部後續的子句都將按順序執行,由於沒有中斷語句來終止switch/case的執行。
    錯選了B,其實B乍一看是好像是沒有錯誤的,可是沒有告訴你break語句的位置,應該是執行其他的case語句。

  • The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operator as A
    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;
    理解:條件運算符能夠做爲if-else的縮寫語句的縮寫形式。
    咱們觀察選項A和選項C意思是同樣的,我錯選了C,注意觀察,C其實只是一個包含條件運算符的表達式。是不能等同於if-else語句的。

  • 若是s是一個字符串,那麼下面的循環會作什麼呢?
    for (int j = s.length;j > 0;j——)
    System.out.print(s.charAt(j - 1));
    A。它是向後打印的。
    B。它向前打印。
    C。跳過最後一個字符後,它會向後打印出來。
    D。它是向後打印的,但不打印第0個字符。
    E。它產生一個運行時錯誤,由於在j=0的時候,s.charAt(j-1)沒有字符。
    理解:變量j從字符串長度到1,每次打印出位置j-1的字符。長度爲1的字符是第一個字符,這是字符串的最後一個字符。它一直持續到j = 1,並輸出位置j - 1或第0字符的字符,以便向後打印整個字符串。

  • The following loop is syntactically valid.
    for (int j = 0; j < 1000; j++) j--; A
    A . true
    B . false
    理解:從邏輯上講,這個循環沒有意義,由於j將不斷地遞增和遞減,這樣它就不會達到1000,可是這個循環在語法上並無錯。

結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172304
    • 值得學習的或問題:首先,段志軒同窗的博客有些簡單。博客中問題的解決過程並非很詳細。但願能夠給出解決步驟和思路。其次,教材內容總結最好添加一下本身的理解。 博客的排版很好,簡潔清晰。這學期,段志軒同窗在java上下了很大的功夫,由於我跟他一個宿舍的,有時候,他會敲代碼敲到夜裏一點多,直到電腦沒電了才罷休。在編寫項目上他也花費了不少時間思考,和我一塊兒探討PP8.6的思路。他確實更加勤奮。可是有時候,在代碼編寫上仍是有一些不細心的小錯誤,但願他之後可以儘可能的避免。同時,保持這股學習的幹勁,不斷努力!

    • 20172328
    • 值得學習的或問題:李馨雨同窗的博客內容很是豐富,教材中有本身的理解。她的書上面五光十色的,標記的都很清楚。她的成績一直在班裏都是名列前茅的。她的問題解決也很詳細,有本身的總結博客中修改字體和字體顏色,可是錯題正確答案的字體效果不是特別好。但願能夠改一下。李馨雨的學習態度也很認真,每週末都泡在圖書館中學習。她對教材的理解和概念理解的很是深入,但願能與她多交流更好地提升本身。我應該學習她的學習態度,一分耕耘一分收穫,付出了多少才能獲得多少。

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

這周在項目上糾結了很長時間,有思路殊不知道如何實現。對於例子和概念的理解深度仍是不夠。下了功夫和沒有花時間仍是有很大的區別的。同時,在測試上所用的時間較多,一方面是本身的基礎理解不紮實,另外一方面對翻譯後的題意有很大誤差,應該增強英語的學習。commit方面正在逐步改進,總之先要注意日後的格式,以前的再慢慢的進行修改。要保持良好的心態,調整本身的壓力,分配好本身的時間。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 122/122 1/1 20/20
第二週 487/609 1/2 18/38
第三週 482/1091 1/3 22/60
第四周 1357/2448 1/4 20/80
第五週 628/3106 1/5 20/100
第六週 566/3672 2/7 20/120

參考資料

相關文章
相關標籤/搜索