20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结
20172313 2017-2018-2 《程序設計與數據結構》第十周學習總結
教材學習內容總結
學習動態結構,初步學習鏈表中的增刪查改。
了解Java集合類API是由Java類庫中定義的幾種表示不同類型集合的類。
了解泛型:一個集合所管理的對象的類型要在實例化該集合對象時才確定,保證了集合中對象類型的兼容性。
教材學習中的問題和解決過程
- 問題1:集合是一種對象,對象適用于定義集合,書上說集合和抽象數據類型是可以互換的等同概念,那么為什么對象特別適用于實現抽象數據類型。
- 問題1解決方案:抽象數據類型(ADT)是一個包含數據和施加在這些數據上的操作的集合。對象實際上就是將變量和相關的方法封裝在一起的實體。對象隱藏了ADT背后的實現細節,并且將借口和底層的實現相分離,使得實現發生變化后并不影響接口。
- 問題2:ArrayList是一種異構集合,那么ArrayList類提供抽象數據類型嗎?
- 問題2解決方案:ArrayList類提供抽象數據類型。ArrayList類提供一個信息集合,并提供保存和訪問信息的操作,而實現的細節對我們來說是隱藏的。也就是說,當時用一個ArrayList對象時,不需要知道他存放的數據是什么或著操作是如何實現的。
- 問題3:不理解鏈表中指針的是如何定義的,指針的使用也不是很清楚。
問題3解決方案:
Java語言中的對象引用實際上是一個指針(這里的指針均為概念上的意義,而非語言提供的數據類型),所以我們可以編寫這樣的類來實現鏈表中的結點。
程序代碼:
class Node
{
Object data;
Node next;//指向下一個結點
}
將數據域定義成Object類是因為Object類是廣義超類,任何類對象都可以給其賦值,增加了代碼的通用性。為了使鏈表可以被訪問還需要定義一個表頭,表頭必須包含指向第一個結點的指針和指向當前結點的指針。為了便于在鏈表尾部增加結點,還可以增加一指向鏈表尾部的指針,另外還可以用一個域來表示鏈表的大小,當調用者想得到鏈表的大小時,不必遍歷整個鏈表。
鏈表的數據結構我們可以用類List來實現鏈表結構,用變量Head、Tail、Length、Pointer來實現表頭。存儲當前結點的指針時有一定的技巧,Pointer并非存儲指向當前結點的指針,而是存儲指向它的前趨結點的指針,當其值為null時表示當前結點是第一個結點,因為當刪除當前結點后仍需保證剩下的結點構成鏈表,如果Pointer指向當前結點,則會給操作帶來很大困難。如何得到當前結點呢?我們定義了一個方法cursor(),返回值是指向當前結點的指針。類List還定義了一些方法來實現對鏈表的基本操作,通過運用這些基本操作我們可以對鏈表進行各種操作。例如reset()方法使第一個結點成為當前結點。insert(Objectd)方法在當前結點前插入一個結點,并使其成為當前結點。remove()方法刪除當前結點同時返回其內容,并使其后繼結點成為當前結點,如果刪除的是最后一個結點,則第一個結點變為當前結點。
代碼調試中的問題和解決過程
- 問題1:一開始做對鏈表的增刪查改的時候,由于對概念的理解不清,直接令兩個對象進行比較,導致比較的結果與實際不符,也就進而導致了刪除鏈表節點不成功。
問題1解決方案:在Java中,除了值類型,另外還有一種引用類型,而不同的對象,其引用值其實并不相等,即在內存中的不同的地址單元中。比如我們定義了學生類,分別有兩個學生對象實例 :
Student stu= new Student(); Student stu1= new Student();
此時我們無論是使用stu==stu1符號,或者stu.equals(stu1)方法,把兩個對象進行比較,得到的結果都是不相等的,因為對于引用類型來說,默認是比較兩個對象引用的地址,顯示,每個對象的引用有自己唯一的地址,所以,是不相等。把對象中所儲存的內存地址中的值轉化為字符串類型的在進行比較就可以了。
代碼托管
上周考試錯題總結
- 錯題1: An exception that could also arise in the try statement that does not have an associated catch statement is
A . ClassNotFoundException
B . IllegalArgumentException
C . NegativeArraySizeException
D . NullPointException
E . OutOfMemoryException - 解析 如果數組尚未實例化,那么i3將拋出NullPointerException。 ClassNotFoundException,IllegalArgumentException和OutOfMemoryException不會被拋出,因為try語句中沒有代碼引用某個未知類,使用參數或處理新內存的生成。 NegativeArraySizeException僅在實例化數組時出現。
- 錯因分析:在做測試的時候還未徹底的學習課本,導致概念理解不清。
- 錯題2: Which of the following is not true of the RuntimeExceptions class?
A . All RuntimeExceptions throw checked exceptions
B . All RuntimeExceptions are Throwable objects
C . RuntimeException has child classes ArithmeticException and NullPointerException
D . RuntimeException objects are not Error objects
E . All of the above are true - 解析 B,C和D中的答案都是正確的,RuntimeExceptions是Throwable對象,不是Error類的一部分,兩種類型的RuntimeException是ArithmeticException和NullPointerException。不是RuntimeException的異常包括各種檢查的異常,但RuntimeException不是檢查異常。
- 錯因分析:自己粗心大意,對題一理解不清導致錯誤。
- 錯題3: If an exception is thrown and is not caught anywhere in the program, then the program terminates.
A . true
B . false - 解析 異常是interest的事件,或者是沒有異常處理程序就無法正常處理的運行時情況。異常被關聯的異常處理程序捕獲。如果拋出異常但未處理,則程序必須終止。
- 錯因分析:對異常的概念理解混淆。
- 錯題4: A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
A . true
B . false - 解析 所有的try語句都必須至少有一個catch語句,或者沒有理由擁有try語句。對于可能引發的每種類型的異常,可以有一個catch語句。程序員可以指定盡可能多的catch語句。此外,try語句可能有一個finally子句,但不需要一個。
- 錯因分析:對異常的捕獲概念理解不清。
- 錯題5: If an exception arises in a catch statement, and the exception is of the type caught by the catch statement, then the catch statement catches the same exception. For instance, if the following catch statement first catches an ArithmeticException and, while executing, throws another ArithmeticException, it is able to catch the second ArithmeticException as well the first.
catch (ArithmeticException ex) {...}
A . true
B . false - 解析 異常會導致當前語句停止執行并控制外部傳送到第一個catch(在當前語句之后)可以捕獲異常的傳輸。 因此,catch語句不會捕獲從它自身內部拋出的異常,盡管catch語句可以在其中嵌套額外的try和catch語句。
- 錯因分析:在學習異常的傳遞的時候,沒弄清異常傳遞的真正定義是什么,再犯了這個錯誤后,一定要好好記住!
結對及互評
- 博客中值得學習的或問題:
- 排版精美,對于問題研究得很細致,解答也很周全。
- 代碼中值得學習的或問題:
- 代碼寫的很規范,思路很清晰,繼續加油!
點評過的同學博客和代碼
- 本周結對學習情況
- 20172332
- 20172326
- 結對學習內容
- 第13章 集合
其他(感悟、思考等,可選)
有一個問題一直困擾著我,那就是自己到底為什么而讀書,為什么而學習,這些天正好看到一段話,現放到這里予自己以共勉。
作者:孫在在
鏈接:https://www.zhihu.com/question/40683692/answer/90861351
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
我感到害怕。就像我們不知道冬天從哪天開始,只會感覺夜的黑越來越漫長。我害怕一跟他們談話,我就像一個透明的人,蒼白的腦袋無法隱藏。我所擁有的內涵是什么?不就是人人能脫口而出,游蕩在空氣中最通俗的認知嗎?像心臟在身體的左邊。春天之后是夏天。美國總統是世界上最有權力的人。但閱讀的人在知識里遨游,能從食譜論及管理學,八卦周刊講到社會趨勢,甚至空中躍下的貓,都能讓他們對建筑防震理論侃侃而談。相較之下,我只是一臺在MP3世代的錄音機,過氣、無法調整。我最引以為傲的論述,恐怕只是他多年前書架上某本書里的某段文字,而且,還是不被熒光筆畫線注記的那一段。我害怕,當他們讀書時,臉就藏匿在書后面。書一放下,就以貴族王者的形象在我面前閃耀。舉手投足都是自在風采。讓我明了,那不只是知識,更是魔力。他們是懂美學的牛頓。懂人類學的梵谷。懂孫子兵法的甘地。血液里充滿答案,越來越少的問題能讓他們恐懼。彷佛站在巨人的肩牓上,習慣俯視一切。那自信從容,是這世上最好看的一張臉。我害怕,我祈禱他們永遠不知道我的不安,免得他們會更輕易擊垮我,甚至連打敗我的意愿都沒有。我如此害怕,因為他們的榜樣是偉人,就算做不到,退一步也還是一個,我遠不及的成功者。我害怕,他們知道「無知」在小孩身上才可愛,而我已經是一個成年的人。我害怕,因為大家都喜歡有智慧人。我害怕,他們能避免我要經歷的失敗。我害怕,他們懂得生命太短,人總是聰明得太遲。我害怕,他們的一小時,就是我的一生。我害怕,尤其是,還在努力的人。
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 126 | 1/1 | 20/20 | |
| 第二周 | 388/466 | 1/2 | 15/35 | |
| 第三周 | 706/1162 | 1/3 | 17/52 | |
| 第四周 | 1104/2266 | 1/4 | 20/72 | |
| 第五周 | 1126/3392 | 1/5 | 15/87 | |
| 第六周 | 906/4298 | 1/6 | 20/107 | |
| 第七周 | 1233/5531 | 1/7 | 20/127 | |
| 第八周 | 1091/6622 | 1/8 | 24/151 | |
| 第九周 | 320/7042 | 1/9 | 20/171 | |
| 第十周 | 335/7377 | 1/10 | 20/191 |
計劃學習時間:20小時
實際學習時間:20小時
改進情況:
到這一周為止,教材上的學習內容就全部結束了,回頭看這一本書,也僅僅是學了一遍而已,里面還是存在著不熟悉以及沒有靈活掌握的內容,尤其是最后的這幾章,都存在著一定的難度。以后還會多加復習,雖然教材結束了,但Java的學習才剛剛開始而已,從下周開始,王老師就要開始教新一部分的知識和內容了,希望我能夠應對好以后的問題和挑戰吧,也希望自己以后還能夠繼續不斷進步。
參考資料
《Java語言沒有指針,怎樣實現鏈表?》
《Java中兩個對象的比較equals()方法和==號的區別》學習指導
轉載于:https://www.cnblogs.com/yu-kunpeng/p/9061390.html
總結
以上是生活随笔為你收集整理的20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python--通过xpath相对节点位
- 下一篇: 数据预处理(Python scikit-