20155303 2016-2017-2 《Java程序設計》第二周學習總結


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的基本語法知識

參考資料


免責聲明!

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



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