20155303 2016-2017-2 《Java程序設計》第二周學習總結
教材學習內容總結
『注意』
-
“//”為單行批注符; “/*”與“*/”為多行批注符,編譯程序會忽略“/*”與“*/”之間的內容。但不能將多個“/*”與“*/”嵌套使用。
-
在程序中寫下一個浮點數時,編譯程序默認使用double類型,如
float PI = 3.14;
會報錯,要想避免這個錯誤,可以改為float PI = 3.14F;
或float PI = (float) 3.14;
-
在程序中寫下一個整數時,默認使用不超過int類型長度,如
int number = 2147483648;
和long number = 2147483648;
都會報錯,因為2147483648超出了int類型的長度,所以應改為long number = 2147483648L;
-
如果變量i是boolean類型,在if中做判斷只需要寫:
if(i) {...}
-
for()中每個描述區塊以分號“;”作分隔,而在一個描述區塊中若想寫兩個以上的描述句,則使用“,”作分隔。
-
switch程序只會在一開始的switch括號中取出變量的值一次,再與case比較,而if-else每次判斷都需要取值,所以在這種情況下switch語句的效率要高於if-else。
-
Math.random() * n
表示產生0~n的隨機數。
教材學習中的問題和解決過程
- 問題一:print、printf、println的區別(P56)
課本中提到,print輸出文字不換行,println輸出文字換行,printf是對輸出文字格式化后再顯示在文本模式中。查閱相關資料學習之后,我認為Java中的printf與C語言中的printf差別不大,都是進行格式化輸出;而print與println都是標准輸出,只不過print不換行,println換行而已。輸入以下代碼,得到的結果如圖:
- 問題二:Java中的關鍵詞與保留字(P58)
Java中的變量在命名時不可以使用關鍵詞與保留字。查閱資料后學習到Java中的關鍵詞和保留字如下:
- 問題三:變量初始化(P58)
在Java中,聲明局部變量后,未給其指定任何值就使用變量,會發生編譯錯誤,代碼及運行結果如圖:
正確的程序如下:
- 問題四:boolean運算(P59)
boolean是我們新接觸的一種類型,可指定的值只有true和false,否則編譯時會報錯:
正確程序如下:
- 問題五:位運算與左移右移運算符(P64)
按照課本P64的代碼運行,得到的結果並不是正確結果。剛開始以為我的輸入有問題,仔細檢查后發現,變量number在每次運算中都被重新賦值,導致結果出錯。
基於課本上的思路,修改代碼如下,最終得到了正確結果。
- 問題六:int可儲范圍的溢出(P69)
int類型的最大值是Int.MAX=2147483647,期望中Int.MAX+1超過上限而歸零。但實際情況,int的最大值在內存中的字節是:01111111 11111111 11111111 11111111,Int.MAX+1則變成:11111111 11111111 11111111 11111111,在Java中,最高位為1表示負數,所以顯示的結果為-2147483648,Int.MAX+1並不會因為超出存儲范圍而溢出。代碼及調試結果如下:
- 問題七:break和continue配合標簽使用(P77)
break:設定標簽與區塊,可以離開整個區塊。代碼與運行結果如下圖:
continue:配合標簽使用,可以自由跳至任意一層for循環。代碼與運行結果如下圖:
如果把back1改為back2,System.out.println("test")
將會被執行,運行結果與back1完全不同。
- 問題八:指定精度與預留字符寬度(P57)
例如:System.out.printf("example:%6.2f%n",19.23);
預留了6個字符的寬度,而19.23只有5個字符,因此補一個空格在最前端。仔細想想,如果想讓輸出排列整齊,或者制表格之類的,預留字符寬度就能起到很大作用了!附上未預留和預留的代碼運行圖:
課后習題思考與總結
- P80 6:關於在Java中,-Integer.MAX_ VALUE是否與Integer.MIN _VALUE相等的問題,實際操作結果為“false”。
分別顯示-Integer.MAX_ VALUE與Integer.MIN _VALUE如圖,這是因為int類型的最大值是2147483647,最小值為-2147483648,所以結果為false。
- P80 7、8:這兩道涉及到++和--運算符的位置問題。將++或--運算符寫在變量前,表示先將變量值加或減1,然后再返回變量值,將++或--寫在變量后,表示先返回變量值,然后再對變量加或減1。第7題和第8題的運行結果分別如圖:
代碼調試中的問題和解決過程
-
類型聲明
『錯誤』:在某次編寫for循環的程序時,編譯時報錯(如圖)。明明在for語句中聲明了i為int型變量,為什么提示沒有找到變量i?
『解決』:仔細檢查后發現自己粗心把輸出i放在了for語句之外,而for語句中對變量i的聲明只在for循環中有效,所以編譯時才會報錯。
-
字符串連接問題
『錯誤』:第一次撰寫上面問題一“探究print、printf、println的區別”的程序時,我的代碼是這樣的:不知道什么原因,出現了這種錯誤提示。
『解決』:之后在網上查找資料,發現了這樣兩行代碼:
覺得非常奇怪,不明白為什么“”與i之間要用“+”連接。抱着懷疑的態度修改了我的代碼,竟然成功了!Why?!
之后去圖書館翻閱了相關書籍,最終在華盛頓大學Stuart Reges Marty Stepp編著的《Java程序設計教程》中找到了詳細的解釋。原來,Java中的“+”還可以用來表示字符串的連接,將多個字符串用“+”連接,就形成了一個可以求值的表達式。如“I have ”+3+" things to concatenate"
輸出的結果為I have 3 things to concatenate
。
關於字符串連接的問題,我隨后參考了java五種拼接字符串的方法這篇博客進行了大致的學習,簡單了解到不同字符串連接方式對性能的影響,受益很多。
- 『附』
編寫博客時發現markdown好像不能同時輸入兩個“*”(星號),因為會自動將兩個星號之間的內容變為斜體,類比Java,我突然想到了課本P59貌似提到過如何表示一些已經有特殊用途的符號,比如“'”(單引號)。大致學習了課本上的內容之后,編寫了一個(有趣的)代碼,練習了轉義字符的使用。
代碼托管
-
代碼提交過程截圖:
-
代碼量截圖:
-
『寫在后面』
第一次使用git bash的時候,中文的commit全部顯示亂碼,參考相關資料后輸入了以下三行命令,問題得到解決:
上周考試錯題總結
-
git log
:查看提交歷史 -
查找home目錄中昨天創建的文件的命令是:
find ~ -ctime 1
『考點』:與時間相關的命令參數:
-atime
:最后訪問時間;-ctime
:創建時間;-mtime
:最后修改時間。以-mtime
為例,-mtime n
:n天之前的“一天之內”修改過的文件;-mtime +n
:n天之前(不包含n天本身)被修改過的文件;-mtime -n
:n天之前(包含n天本身)被修改過的文件。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 16/16 | 1/1 | 18/18 | 初步認識了Java |
第二周 | 219/235 | 2/2 | 28/46 | 學習了Java的基本語法知識 |