20165318 2017-2018-2 《Java程序設計》第二周學習總結
20165318 2017-2018-2 《Java程序設計》第二周學習總結
教材學習內容總結
本周學習了第二章和第三章的內容,掌握了Java中基本數據類型、數組、運算符、表達式和語句等方面的知識。
總結第一周的學習經驗,在本周的學習過程中,我仔細閱讀了教材,發現了很多以往在學習C語言中沒有註意到的小細節。在與C語言對比學習的過程中,不僅鞏固了C語言基礎,而且對Java的便利有了新的認識,仿佛打開了一扇大門,在編寫代碼時不再覺得枯燥無味,反而會主動思考,並用不同的方法去解決同一個問題。
Java與C語言的不同之處
1、Java中沒有無符號的byte,short,int和long,這一點和C語言不同。因此,unsigned int m;是錯誤的s變量聲明。
2、Java中的char型數據一定是無符號的,而且不允許使用unsigned來修飾所聲明的char型變量。
3、Java不允許在聲明數組中的方括號內指定數組元素的個數。例如int a[12];將導致語法錯誤。
4、Java允許使用int型變量的值指定數組的元素的個數。例如:
int size = 30;
double number[] = new double[size];
教材學習中的問題和解決過程
- 問題1:類型轉換運算(P21)
在講把級別高的變量的值賦給級別低的變量,必須使用類型轉換運算時,有一個例子:
long y = (long)56.98F
我當時很疑惑為什麽float型變量賦給long型變量時要使用類型轉換運算。
解決過程:在第二次看教材時發現,我混淆了float和long的精度高低。基本數據類型變量按精度從低到高排列:
byte short char int long float double
問題2:類型轉換過程中精度損失(P22)
教材中有例子:
byte a = (byte)128;
byte b = (byte)(-129);
得到的a和b的值分別時-128和127,我不理解這個代碼的運算過程。
解決過程:在類型轉換運算中得到了解決,並自己嘗試計算
byte a = (byte)255;
得到的結果的確是a=-1。
代碼調試過程中的問題和解決過程
- 問題1:我使用的是Windows中的git bash,但是在git 中會出現中文亂碼的問題,我的git中默認的編碼是UTF-8,我在vim中編寫代碼後用編譯運行就會出現中文亂碼。我參考了windows下git bash中文亂碼解決辦法,但在這與我的git情況不符。我在自己嘗試後,發現使用GBK編碼運行不會出現中文亂碼,但是在vim編輯器中會出現中文亂碼。
這個問題我現在還沒有找到解決方法。
- 問題2:
我在調試例子3.9(P47)時出現錯誤
解決方法:經過檢查代碼,我發現,我將
System.out.printf
,輸入成System.out.println
,導致println
與其內容中的%d
不符。問題3:在調試例子3.7(P45)輸出100以內的z所有素數時,結果只能輸出2和3代碼如下;
public class Example3_7 { public static void main (String args[]) { int sum =0,i,j; for(i=1;i<=10;i++) { if(i%2==0) { continue; } sum = sum + i; } System.out.println("sum="+sum); for(j=2;j<=100;j++) { for(i=2;i<=j/2;i++){ if(j%i==0) { break; } } if(i>j/2) { System.out.println(""+j+"是素數"); } } } }
解決方法:由於我打代碼時都會使用行尾風格,並且即使是
if
語句中只有一行代碼也不會省略{},因此在輸入書上代碼時,我將if
語句中的break;
語句也用{}括起來了,但是輸出素數卻只有2和3,但我去掉break;
語句的{}時運行結果正常。
雖然能輸出正確結果了,但我還是不太明白問題出在哪,難道break
語句只跳出了if
語句卻沒有跳出for
循環嗎?希望能得到解答。
碼雲鏈接:https://gitee.com/BESTI-IS-JAVA-2018/20165318_sun_xiaoxuan
腳本運行截圖:
參考資料:
windows下git bash中文亂碼解決辦法
類型轉換運算
20165318 2017-2018-2 《Java程序設計》第二周學習總結