Java 习题2 参考答案及解析(2)

来源:互联网 发布:9分钟进5球 知乎 编辑:程序博客网 时间:2024/06/04 19:21

习题2 参考答案及解析(1)

3.阅读或调试程序

(1) 上机运行下列程序,注意观察输出的结果。

Javapublic 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()的区别。

Javapublic 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)上机调试下列程序,了解基本数据类型数据的取值范围。

Javapublic 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】的输出结果是什么?

Javapublic 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】的输出结果是什么?

Javapublic 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的值也会跟着相应的改变。

1 0
原创粉丝点击