1. 程式人生 > >20165318 2017-2018-2 《Java程序設計》第二周學習總結

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

utf-8 因此 class 亂碼 bash main ima htm 調試

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程序設計》第二周學習總結