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


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

教材學習內容總結

  • 第八章是數組。那么我們就要清楚數組的概念

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

  • 聲明數組有兩種格式

    • 元素類型[] 數組名 = 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運算符中,索引運算符“[]”有最高的優先級。

  • 對象數組:

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

  • 命令行實參:String[]參數(通常稱為args)代表了命令行實參。

命令行實參存儲在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循環的意思,實際上,這其實是對上一周學習不夠透徹的原因。

  • 問題1解決方案:這個語句的本質就是for-each語句。在第六章的時候for-each循環引用的是Iterable對象中的ArrayList對象舉例。依次輸出數組中的值,從索引0開始。所以,在學習數組的時候,要注意應用這種循環。

    參考資料:[java中for循環的幾種方式](https://www.cnblogs.com/K-artorias/p/6842059.html)
  • 問題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 登錄后圖形化界面藍屏問題](https://blog.csdn.net/seekn/article/details/78573996)
## [代碼托管](https://gitee.com/CS-IMIS-23/GK20172301_JavaProgramming)

上周考試錯題總結

  • 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

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM