Java 習題2 參考答案及解析(2)

習題2 參考答案及解析(1)

3.閱讀或調試程序

(1) 上機運行下列程序,注意觀察輸出的結果。

Java
public class E{
    public static void main(String args[]){
        for(int i=20302;i<=20302;i++){
            System.out.println((char)i);
        }
    }
}

(2) 上機調試下列程序,注意System.out.print()和System.out.println()的區別。

Java
public class OutputData{
    public static void main(String args[]){
        int x=234,y=432;
        System.out.println(x+"<"+(2*x));
        System.out.print("我輸出結果後不回車");
        System.out.println("我輸出結果後自動回車到下一行");
        System.out.println("x+y="+(x+y));
    }
}

(3)上機調試下列程序,瞭解基本數據類型數據的取值範圍。

Java
public class E{
    public static void main(String args[]){
        System.out.println("byte取值範圍"+Byte.MIN_VALUE+"至"+Byte.MAX_VALUE);
        System.out.println("short取值範圍"+Short.MIN_VALUE+"至"+Short.MAX_VALUE);
        System.out.println("int取值範圍"+Integer.MIN_VALUE+"至"+Integer.MAX_VALUE);
        System.out.println("long取值範圍"+Long.MIN_VALUE+"至"+Long.MAX_VALUE);
        System.out.println("float取值範圍"+Float.MIN_VALUE+"至"+Float.MAX_VALUE);
        System.out.println("double取值範圍"+Double.MIN_VALUE+"至"+Double.MAX_VALUE);
    }
}

(4)下列程序標註的【代碼1】和【代碼2】的輸出結果是什麼?

Java
public class E {
    public static void main(String args[]) {
        long[] a = { 1, 2, 3, 4 };
        long[] b = { 100, 200, 300, 400, 500 };
        b = a;
        System.out.println("數組b的長度:" + b.length);  //【代碼1】
        System.out.println("b[0]=" + b[0]);           //【代碼2】
    }
}

(5) 下列程序標註的【代碼1】和【代碼2】的輸出結果是什麼?

Java
public class E {
    public static void main(String args[]) {
        int[] a = { 10, 20, 30, 40 }, b[] = { { 1, 2 }, { 4, 5, 6, 7 } };
        b[0] = a;
        b[0][1] = b[1][3];
        System.out.println(b[0][3]);        //【代碼1】
        System.out.println(a[1]);           //【代碼2】
    }
}

答案解析

1.程序使用了一個循環語句,輸出的是(char)20302的值,輸出的實際上是Unicode表中第20302個字符,運行結果爲“低”


2.第2題運行結果
System.out.print()輸出後不回車,而System.out.println()輸出後會自動回車


3.瞭解基本數據類型數據的取值範圍
取值範圍


4.答案:【代碼1】:4。【代碼2】:b[0]=1。
解析:數組屬於引用型變量,因此兩個相同類型的數組如果具有相同的引用,他們就有完全相同的元素。因此當執行b = a時候,系統會釋放最初分配給b的元素後,b和a指向相同的內存地址(引用相同)所以b的長度就是a的長度爲4,b[0]=a[0]=1。
我們在C語言中學過指針,指針就是地址,而Java中的引用就和指針十分相似,區別在於指針可以修改例如p++,而引用是無法修改的。在犧牲了靈活性的前提下提升了程序的安全性。


5.答案:【代碼1】:40 【代碼2】:7
int[] a = { 10, 20, 30, 40 }, b[] = { { 1, 2 }, { 4, 5, 6, 7 } };
我們要注意這條語句,a是一個一維數組,元素分別是10,20,30,40,而b是一個二維數組(相當於int[]b[]這種格式),二維數組中每一個元素都是一個一維數組,而Java的特點是二維數組中的一維數組的長度是沒有限制的,是按照你所賦值的最大長度來計算。所以第一個元素爲1,2,0,0第二個元素爲4,5,6,7。
我們可以把二維數組看成一個矩陣第一個下標代表行,第二個下標代表列
所以數組b可以看成

14250607

b[0]=a相當於把a的引用賦值給b[0](b[0]看成一個一維數組),結果變成了
104205306407

b[0][1] = b[1][3],這樣b就變成了
10475306407

所以輸出b[0][3]的值爲30,那麼問題在於a[1]的值爲何是7而不是20呢?是因爲a中的值也被修改了,原因就在於a的引用賦值給了b[0],那麼b[0]和a指向同一塊內存地址,那麼如果修改了b[0]中的值,a的值也會跟着相應的改變。
發佈了41 篇原創文章 · 獲贊 398 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章