Java基础教程(清华大学出版社第2版)部分习题答案第一章【答案】答案见教材略。第二章1.请说明注释的作用。【答案】答案见教材略。2.判断下列那些是标识符?(1)3class(2)byte(3)?room(4)Beijing(5)beijing【答案】(1)(2)(3)不是标识符,因为标识符不能已数字开始,也不能是保留关键字(如byte),不能以?开始。3.请指出下列声明字符变量ch的语句是否存在错误?如果有,请改正。(1)charch='A';(2)charch='\u0020';(3)charch=88;(4)charch='ab';(5)charch=A;【答案】(4)错,因为关键字char是用于声明字符变量,不可声明字符串变量。4.如果intx=1,y=-2,n=10;那么,表达式x+y+(--n)*(xy&&x0?(x+1):y)的值是什么类型?结果是多少?【答案】int型,值为17。5.如果intk=1,那么'H'+k的类型是什么?下面语句是否存在差错?如果有,请改正。(1)intk=1;(2)charch1,ch2;(3)ch1='H'+k;(4)ch2=98;【答案】'H'+k的类型为int型。(3)有错。'H'+k为int型,ch1为char型,将高精度赋给低精度类型时必须实行强制转换。6.请指出下面程序在编译时是否会出现错误。如果有,请改正。publicclassdoubleTointExample{publicstaticvoidmain(Stringargs[]){inta;doubleb=1,c=2;a=(int)(b+c);System.out.println(a=+a);}}【答案】无错误。输出结果:a=37.请指出执行完下面程序后x、y和z的输出值是多少?请上机验证。publicclassdoubleTointExample{publicstaticvoidmain(Stringargs[]){intx,y,z;x=1;y=2;z=(x+y3?x++:++y);System.out.println(x=+x);System.out.println(y=+y);System.out.println(z=+z);}}【答案】x=1y=3z=38.请指出下面程序片段输出的结果是什么。inti=1,j=10;do{if(i++--j)break;}while(i5);System.out.println(“i=”+i+”---”+“j=”+j);【答案】i=5---j=69.请分别用if-else语句和switch语句编写实现下列功能的程序。某同学某门课的成绩可能的结果为1,2,3,4,5。当成绩为1时请输出不及格;成绩为2时请输出及格;成绩为3时请输出中等;成绩为4时请输出良好;成绩为5时请输出优秀。【答案】/*if-else描述程序*/publicclassxt020901{publicstaticvoidmain(Stringargs[]){intscore=4;if(score==1){System.out.println(不及格);}elseif(score==2){System.out.println(及格);}elseif(score==3){System.out.println(中等);}elseif(score==4){System.out.println(良好);}else{System.out.println(优秀);}}}/*switch描述程序*/publicclassxt020902{publicstaticvoidmain(Stringargs[]){intscore=4;switch(score){case1:System.out.println(不及格);break;case2:System.out.println(及格);break;case3:System.out.println(中等);break;case4:System.out.println(良好);break;case5:System.out.println(优秀);break;}}}10.请编写输出乘法口诀表的程序。乘法口诀表的部分内容如下:1*1=11*2=22*2=31*3=32*3=63*3=91*4=42*4=83*4=124*4=16……publicclassxt0210{publicstaticvoidmain(Stringargs[]){finaldoublePI=3.141592654;doublearea,r;area=PI*r*r;System.out.println(“面积=”+area);}}【答案】publicclassxt0210{publicstaticvoidmain(Stringargs[]){inti,j;for(i=1;i=9;i++){for(j=1;j=i;j++)System.out.print(j+*+i+=+i*j+);System.out.println();}}}11.请编写程序实现如下效果图。【答案】publicclassxt0211{publicstaticvoidmain(Stringargs[]){inti,j,k,num;charch;num='A'-1;for(i=1;i=4;i++){for(k=1;k=4-i;k++)System.out.print();for(j=1;j=i;j++){num=num+1;ch=(char)num;System.out.print(ch+);}System.out.println();}for(i=1;i=4;i++){for(k=1;k=i-1;k++)System.out.print();for(j=1;j=5-i;j++){num=num+1;ch=(char)num;System.out.print(ch+);}System.out.println();}}}12.分别利用for语句、while语句以及dowhile语句编写一个求和程序(即sum=1+2+3+…+n)。【答案】/*for语句实现*/publicclassxt021201{publicstaticvoidmain(Stringargs[]){inti,n=100;longsum=0;for(i=1;i=n;i++)sum=sum+i;System.out.println(sum[1:n]=+sum);}}/*while语句实现*/publicclassxt021202{publicstaticvoidmain(Stringargs[]){inti,n=100;longsum=0;i=1;while(i=n){sum=sum+i;i=i+1;}System.out.println(sum[1:n]=+sum);}}/*dowhile语句实现*/publicclassxt021203{publicstaticvoidmain(Stringargs[]){inti,n=100;longsum=0;i=1;do{sum=sum+i;i=i+1;}while(i=n);System.out.println(sum[1:n]=+sum);}}13.复习break和continue语句,调试本章设计这两个语句的程序。【答案】答案见教材略。14.上机调试本章提供的输入输出语句。【答案】答案见教材略。第三章1.选择题(1)不允许作为类及类成员的访问控制符的是()。A.publicB.privateC.staticD.protected【答案】C(2)为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为()。A.staticvoidmethod()B.publicvoidmethod()C.finalvoidmethod()D.abstractvoidmethod()【答案】A(3)Java中main()函数的值是()。A.StringB.intC.charD.void【答案】D2.改错题(1)一个名为Hello.java程序如下://Hello.java程序publicclassA{voidf(){System.out.println(IamA);}}classB{}publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println(你好,很高兴学习Java);Aa=newA();a.f();}}要求:指出错误,说明错误原因,并改正。【答案】错误原因:一个程序中不可同时申明一个以上的public类。改正措施:将publicclassA变为classA即可(2)类A的定义如下:classA{voidf(){intu=(int)(Math.random()*100);intv,p;if(u50){v=9;}p=v+u;}要求:指出错误,说明错误原因,并改正。【答案】错误原因:Java语言规定,任何变量在使用之前,必须对变量赋值。由于u的值是由随机方法产生的,当u=50时,v在使用前没有赋值,此时执行p=v+u;会出现错误。改正措施:将intv,p;变为intv=0,p;即可(3)B.java内容如下:classA{intx,y;staticfloatf(inta){returna;}floatg(intx1,intx2){returnx1*x2;}}publicclassB{publicstaticvoidmain(Stringargs[]){Aa=newA();A.f(3);a.f(4);a.g(2,5);A.g(3,2);}}要求:指出错误,说明错误原因,并改正。【答案】错误原因:A.g(3,2);由于类方法不仅可以由对象调用而且还可以直接由类名调用,而实例方法不能由类名调用。改正措施:删除A.g(3,2);或将A.g(3,2);改为a.g(3,2);3.简答题(1)简述面向对象程序和面向过程程序设计的异同。(2)简述类中成员变量的分类及差异。(3)简述类中方法的分类及差异。(4)简述类中变量的初始化方式。(5)简述类中成员的几种访问控制修饰符的差异,并举例说明。(6)简述构造方法的作用。【答案】答案见教材略。第四章1.简述Java中继承的含义及特点。【答案】答案见教材略。2.指出下列程序中的错误,请说明错误原因。classA{publicinta=1;privateintb=2;protectedintc=3;intd=4;publicintdispA(){returna;}privateintdispB(){returnb;}protectedintdispC(){returnc;}intdispD(){returnd;}}publicclassBextendsA{publicstaticvoidmain(Stringargs[]){Bbb=newB();bb.testVisitControl();}publicvoidtestVisitControl(){System.out.println(a+dispA());System.out.println(b+dispB());System.out.println(c+dispC());System.out.println(d+dispD());}}【答案】System.out.println(b+dispB());行编辑时出现错误。原因如下:(1)子类B和父类A在同一包中;(2)子类B不能继承父类的private型属性和方法。3.根据下面程序片段,画出类和对象的内存映像图。classA{staticintsv1=10;intsv2=20;intsv3=30;staticvoidsf1(){…}voidf1(){…}}classBextendsA{staticintsv2=30