20172305 2017-2018-2 《程序設計與數據結構》第六週學習總結
教材學習內容總結
本週內容主要爲書的8.1-8.6的內容:
教材學習中的問題和解決過程
- 問題1:數組的聲明、使用
- 問題1解決方案:看過書以後,自認爲數組就是一個對像,一個能夠容納不少元素的對象,能夠分組和管理所需數據,經過索引值來找尋對應位置上存儲的內容,能夠把數組理解爲樹狀圖的感受,每個索引值下方能夠放不少數據,若是保存的是對象的話,則每一個對象內還能夠存在多個相關的變量,很大程度上增長對複雜數據的管控和存儲。數組的聲明方式,對象的聲明方式相似,只不過多加"[]"表示數組。
int[] grades;
int grades[];
- 問題2:多維數組(二維數組)
經過閱讀教材,發現數組能夠有一維的,也能夠有二維的,還能夠有多維數組。若是把一維數組理解爲數軸,那麼二維數組就能夠理解爲平面座標系,三維數組能夠理解爲立體座標系。就拿例8.13爲例,輸出的數字徹底能夠看做座標系上孤立的點。對於二維數組的聲明,有三種方式:git
int[][] grades;
int grades[][];
int[] grades[];
可是經過藍墨雲視頻中的老師講解,說是第三種狀況和前兩種的效果相同,可是沒有人使用,要是用過被負責人看淡,確定會殺了你的。因此,弱弱的初學者只能默默地看過一遍,沒有去用。(多是約定俗成吧),就像我以前說過的,把數組理解爲樹狀圖,對於理解四維及四維以上的數組,有很大幫助。一個分支下面能夠有多個分支,以此類推,能夠存儲一堆有聯繫的,但又有微小差異的對象。web
- 數組是在程序設計中,爲了處理方便, 把具備相同類型的若干元素按無序的形式組織起來的一種形式。
- 問題3:命令行實叄
問題3的解決辦法:數組
- 在命令行中給定的參數就是命令行參數。(即從輸入位置角度理解)。
很淺層的理解,命令行實參就是能夠在命令行上輸入內容,做爲參數放到數組裏面,進行使用。在看過百度上的資料以及書上的內容,僅會使用,而且對於簡單的要求能夠應用,會不斷的查詢資料進行解決的。markdown
- String[]參數(一般稱爲args)表明了命令行實參,在調用解釋器時將提供給程序,即調用解釋器時關於命令行的信息將存放在args數組中供使用。
- 在命令行給定參數時,應注意什麼?
- 命令行的參數以空格隔開。可是,若命令行的參數自己包含空格時,則該參數必須用一對雙引號括起來。
如: java Test1 365 156 China "Beijing of China"
代碼調試中的問題和解決過程
- 問題1:PP8.1
問題1解決方案: 這個程序,我想出四種解決方案,可是三個無用,僅有一個成功。心疼那些耗費腦細胞想出的解決方案數據結構
- 第一種解決方案:對於記錄出現次數的解決辦法,我想參照例8.3的內容,它是記錄大小寫字母的出現次數,是基於Unicode字集符的運算,那麼我是否是能夠應用到數字上呢?字集符上僅有0~9幾個數的編碼值,想法泡湯。
- 第二種解決方案:本方案是基於第一種解決方案和if語句的聯合使用,若是是個位數字的話,進行一次轉換,並經過自增運算符進行計數,若是是含十位數字的話,用求餘的方式八十爲舍掉,再轉換在計數,最後兩次計數差表示含十位數的是自出現次數。在進行最後的輸出,不過感受太麻煩了,止步於想法,沒有去嘗試。
- 第三種解決方案:本方案與前兩個方案有較大的不一樣,沒有用到Unicode字符集,單純的就是數組,我想既然索引值是數字,那爲何不用數字表示數字呢?就是索引值所表明的數字爲存儲的數字,那麼在此基礎上進行自增運算,最後再調用該數剪掉對應的索引值,不就好了麼。
- 第四種解決方案:本方案是在第三種方案上應用的,發如今實例化數組的時候每一個索引值對應的位置都是0,那麼在0的基礎上進行自增,能夠解決身軀不少沒必要要的麻煩,這樣的話就能夠直接調用相對索引值內的數即爲索引值數字所出現的次數。
最終成果在仍是有一點問題,根據例5.7的內容進行應用,可是始終跳不出while循環,或是始終進不去while循環,得助於學長的幫助,想到用個if和break進行跳出循環,正好應用了一下break語句,很是成功的記錄了各個數字出現的次數問題。
less
- 問題2:PP8.5
問題2解決方案:算是第一個本身用數組編的項目,調用了Random方法用來輸出隨機數和Math方法進行輔助,在平均數上的使用,很成功,可是在標準方差上就錯誤百出,先是本身的for循環的變量設置不對,形成都是ArrayIndexOutOfBoundsException異常,解決事後的嘗試便出現一堆的零,邏輯錯誤超噁心,經過調試,發現是本身肯定的隨機範圍是0~2147483647(int型的最大值),形成最後的標準方差出現了數字範圍溢出int型的最大值,變爲的零,僅僅修改隨機數的範圍就行,可是這樣,不就限定了輸出整數的範圍麼?在此基礎之上,我有修飾了輸出整數的格式,經過例6.3的for循環內嵌套if從句,使得每行輸出6個數字,讓輸出結果更人性化。
dom
- 問題3:PP8.6
問題3解決方案:針對8.6有一堆的問題,想了一天多的思路,硬是沒想出來,最後翻書看到DVD的那個例題,想到利用那個進行模仿,而後針對題目中的給出的問題有又了困惑,須要寫一個數組,可是寫一個數組後把一個帳戶進行存放的話,那麼針對一個帳戶的方法又該放到哪?經過學長的講解,發現建立數組下的那個類進行對總體的編寫,針對每個帳戶的類進行對帳戶內的東西進行編寫,就像以前所說的數組理解成爲樹狀圖的方式,這樣就真正的「實例化」了一個系統管理--一個管理不超過30個銀行帳戶的系統。可是想出來了,就是不會作,熱鍋上的螞蟻着急就是不會弄,經過對於欣月的代碼的理解,才初步弄懂。
public boolean saveMoney(double a, String b, long c)
{boolean result = false;
for (int i = 0; i <account.length; i++){
if (account[i] != null){
if(account[i].getName().equals(b)&&account[i].getAcctNumber() == c){
account[i].deposit(a);
result = true;}
}
}
其實反過來看看書中也有提示的,P257DVDCollection.java內有一句report += collection[dvd].toString() + "\n";
也在暗示着,仍是本身看書不夠細緻致使的。在作完後看本身寫的代碼,想一想也沒有那麼難。想到有句俗語「會者不難,難者不會。」其實會與不會之間,就是一道能不能融會貫通的坎,過去了就是一片藍天白雲。
上週考試錯題總結
- 錯題1:The idea that program instructions execute in order (linearly) unless otherwise specified through a conditional statement is known as(程序指令按順序執行的想法(線性),除非經過條件語句指定。)
- A.boolean execution
- B.conditional statements
- C.try and catch
- D.sequentiality
- E.flow of control
- 錯誤解析:「控制流」描述指令執行的順序。它默認爲線性的(或順序的),可是經過使用諸如條件和循環這樣的控制語句來改變。感受當時本身很混亂,明明知道條件語句能夠改變控制流的,還有選擇了問題上又出現的conditional statemrnt。
- 錯題2: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爲正則加1,若是x爲負則減1,若是x爲0則不變)
- 錯誤解析:很是簡單的一道題,用到自增和自減加上if語句就能夠了,看到有道神奇的翻譯覺得是題出錯了,針對0的問題,而後沒有仔細考慮就胡亂選了一個。心痛。
- 錯題3:Assume that count is 0, total is 20 and max is 1. The following statement will do which of the following?(假設count是0,total是20,max是1。下面的語句將執行下列哪項?)
- A.The condition short circuits and the assignment statement is not executed(條件短路和賦值語句沒有執行。)
- B.The condition short circuits and the assignment statement is executed without problem
- C.The condition does not short circuit causing a division by zero error
- 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
- E.The condition will not compile because it uses improper syntax
- 錯誤解析:由於count是0,(count != 0)是假的。由於一個&&條件的左邊是假的,條件是短路的,因此右邊沒有求值。所以,避免了零偏差的潛在除法。由於條件是假的,因此語句max = total / count沒有執行,再次避免了可能的零錯誤。我給理解爲兩個句子,獨立判斷,邏輯與的短路和賦值語句的零偏差的問題。
- 錯題4:If a break occurs within the innermost loop of a nested loop that is three levels deep
(若是在嵌套循環的最內層循環中發生了中斷,那麼這個循環就有三個層次。)
- A.when the break is encountered just the innermost loop is "broken"(當遇到斷點時,最裏面的循環會被「破壞」)
- B.when the break is encountered, all loops are "broken" and execution continues from after the while statement (in our example)
- C.when the break is encountered, all but the outermost loops are broken, and execution continues from the next iteration of the while loop (in our example)
- D.this is a syntax error unless there are break or continue statements at each loop level
- E.none of the above
錯誤解析:break會終止第二個循環內的第三次循環,而後外部的循環仍會繼續下去。
- 執行break語句時,將當即跳轉到控制當前執行流程的語句以後繼續執行。
錯題5:Which of the following are true statements about check boxes?(下面哪一個選項是關於複選框的正確語句?)
A.they may be checked or unchecked(它們可能會被檢查或檢查。)
B.radio buttons are a special kind of check boxes(單選按鈕是一種特殊的複選框。)
C.they are Java components(它們是Java組件)
- D.you can control whether or not they will be visible(你能夠控制它們是否可見)
錯誤解析:複選框的內容是在5.8,標記星號就沒看,經過通讀內容大體理解了複選框。
- 複選框是一個能夠經過鼠標單擊來切換開/關狀態的按鈕,用於設置某個布爾條件爲真或假。
- 錯題6:When comparing any primitive type of variable, == should always be used to test to see if two values are equal.(在比較任何基本類型的變量時,==應該老是用來測試兩個值是否相等。)
- 錯誤解析:這適用於int、short、byte、long、char和boolean,而不是double或float變量。若是兩個雙變量x和y正在被測試,(x == y)只有當它們剛好等於最後一個小數點時纔是正確的。相反,比較這兩個值是很常見的,可是容許在值上有細微的差異。例如,若是= 0.000001,咱們能夠經過(x - y <=)來測試x和y,而不是(x == y)來獲得一個更好的概念,若是它們足夠接近,能夠被認爲是相等的。忽略了浮點數的比較和以往不一樣,以數學的觀念思考這個問題。
- 錯題7:If a switch statement is written that contains no break statements whatsoever(若是一個switch語句沒有包含任何break語句,)
- A.they may be checked or unchecked
- B.radio buttons are a special kind of check boxes
- C.they are Java components
- D.you can control whether or not they will be visible
- E.none of the above(以上都不是)
- 錯誤解析:雖然寫這樣的switch語句是不尋常的,但它是徹底合法的。switch語句執行的正常規則適用於計算switch表達式以後執行的匹配的case子句。接下來,全部後續的子句都將按順序執行,由於沒有中斷語句來終止switch/case的執行。想到了它會每一條都會執行,可是忘記了得先選擇符合的條件,在今後後面繼續執行每一條語句。
- 錯題8:A continue statement(contioue語句)
- A.may be used within a while or a do-while loop, but not a for loop
- B.is identical to a break statement within Java loops
- C.may be used within any Java loop statement(能夠在任何Java循環語句中使用)
- D.may be used within a for loop, but not within a while or a do-while loop
- E.none of the above
錯誤解析:儘管應該避免使用continue語句,但若是可能的話,能夠在Java的三個循環中使用它們:for、while和do-while。
- continue語句和break語句會引發控制流程從一處轉移到另外一處,因此在循環中使用break語句和continue與句不是個好作法。
- 錯題9: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;
- 錯誤解析:Java測試的條件操做符在本例中爲條件(x < 0),若是爲真,則返回值後的值?(本例中爲x),若是爲false,則返回:(在本例中爲0)。原始的if語句是將y賦給x (x < 0)和0。這將經過將y賦值爲x或0 (x < 0)來完成。
(x < 0) ? y = x : y = 0;
語法有錯誤,這個是本身看書不細緻形成的遺漏,沒有細細推敲書上內容。
錯題10:Given the following code, where x = 0, what is the resulting value of x after the for-loop terminates?
(給定如下代碼,當x = 0時,for循環結束後x的結果值是多少?)
for(int i=0;i<5;i++)
x += i;
- 錯誤解析:不知道怎麼回事,硬生生的把+=當作是=,姐過酒吧for最後一次循環中的i值給了x
錯題11:How many times will the following loop iterate?(下面的循環會迭代多少次?)
int x = 10;
do {
System.out.println(x);
x--;
} while (x > 0);
- A.0 times
- B.1 times
- C.9 times
- D.10 times
- E.11 times
- 錯誤解析:一直認爲在跳出do循環的那次不算作循環,認爲是10次,可是經過答案給出的11次,是本身的理解錯誤形成的,應該把出去的最後一次也要算上。
錯題12:Given that s is a String, what does the following loop do?(若是s是一個字符串,那麼下面的循環會作什麼呢?)
for (int j = s.length( ); j > 0; j--)
System.out.print(s.charAt(j-1));
- A.it prints s out backwards(它是向後打印的。)
- B.it prints s out forwards
- C.it prints s out backwards after skipping the last character
- D.it prints s out backwards but does not print the 0th character
- E.it yields a run-time error because there is no character at s.charAt(j-1) for j = 0
- 錯誤解析:作題時仍是對for循環理解不到位,在j=0的時候就已經跳出,再也不執行輸出語句。會輸出「s」字符串的索引值爲0的字符,即s。
- 錯題13:A switch statement must have a default clause.(switch語句必須有一個default子句。)
- 錯誤解析:若是沒有default子句的話,switch語句仍能夠執行,只不過在沒有合適的語句以後會自動結束,不會輸出或者執行什麼。
- 錯題14:Each case in a switch statement must terminate with a break statement.(switch語句中的每一個case都必須以break語句結束。)
錯誤解析:若是break語句不存在,則控制流將繼續到下一個案例中。
本次考試是本身考的最差的一次,不知道爲何,從答上題開始就很混亂,錯的有些事本身會的內容,固然經過這次考試,我也學到本身看書遺漏的內容,複選框的內容沒有看,switch語句的case和break的問題,都是本身的食物,是本身認爲這兩章在高中學過循環,就忽略了細節,是本身的大意才釀成這麼低的分數,已經在考完試後的次日狠狠地又看了一遍第五章和第六章。
結對與互評
點評
- 博客中值得學習的或問題:
- 問題詳細並配有問題理解
- 截圖特別詳細、針對一個問題有多張照片進行解釋,圖文並茂
- 博客排版相對單調,也算做一股清流吧。但願下次能夠把博客寫的更漂亮一點(能夠加粗、高亮、斜體、引用等markdown格式和CSS碼的運用)
- 代碼中值得學習的或問題:
- commit的提交粒度很詳細、而且是學長一直要求我達到的規範(能夠參考學習)
- 代碼寫的規範相對規範(建議應該配有對應的完整註釋)
- 基於評分標準,我給本博客打分:8分。
- 得分狀況以下:
- 正確使用Markdown語法(加1分)
- 模板中的要素齊全(加1分)
- 教材學習中的問題和解決過程, 兩個問題加2分
- 代碼調試中的問題和解決過程, 兩個問題加2分
- 感想,體會不假大空的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
互評對象
感悟
第八章的學習,講的是數組的問題,和以前學習兩章相比,一次學一章,相對輕鬆,不過經過第八章的書後題,認識到如今的編寫和以前的編寫用明顯的區別,各個章的內容都在用,只要有一章有欠缺,編個程序就有問題。尤爲是在編寫8.1和8.5的時候和第五章的內容有很大的聯繫,深感學習java的時候放鬆一會都不行。同時還要不斷的動手、動手、再動手,本身發現問題,本身能解決問題。才能更好的學習java,就像學習數學同樣多刷題有好處的。
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
136/136 |
1/1 |
15/15 |
|
第二週 |
570/706 |
1/2 |
20/35 |
|
第三週 |
613/1319 |
1/3 |
23/58 |
|
第四周 |
1249/2568 |
1/5 |
30/88 |
|
第五週 |
904/3472 |
1/6 |
30/118 |
|
第六週 |
540/4012 |
1/7 |
33/151 |
|
參考資料