習題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.
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可以看成
b[0]=a相當於把a的引用賦值給b[0](b[0]看成一個一維數組),結果變成了
b[0][1] = b[1][3],這樣b就變成了
所以輸出b[0][3]的值爲30,那麼問題在於a[1]的值爲何是7而不是20呢?是因爲a中的值也被修改了,原因就在於a的引用賦值給了b[0],那麼b[0]和a指向同一塊內存地址,那麼如果修改了b[0]中的值,a的值也會跟着相應的改變。