Java面向对象程序设计习题解答.docx

上传人:b****8 文档编号:9140564 上传时间:2023-02-03 格式:DOCX 页数:68 大小:66.71KB
下载 相关 举报
Java面向对象程序设计习题解答.docx_第1页
第1页 / 共68页
Java面向对象程序设计习题解答.docx_第2页
第2页 / 共68页
Java面向对象程序设计习题解答.docx_第3页
第3页 / 共68页
Java面向对象程序设计习题解答.docx_第4页
第4页 / 共68页
Java面向对象程序设计习题解答.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

Java面向对象程序设计习题解答.docx

《Java面向对象程序设计习题解答.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计习题解答.docx(68页珍藏版)》请在冰豆网上搜索。

Java面向对象程序设计习题解答.docx

Java面向对象程序设计习题解答

 

Java面向对象程序设计

清华大学出版社

(编著耿祥义张跃平)

习题解答

 

建议使用文档结构图

(选择Word菜单→视图→文档结构图)

习题1

1.JamesGosling

2.

(1)使用一个文本编辑器编写源文件。

(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。

(3)使用Java解释器(java.exe)运行Java程序

3.Java的源文件是由若干个书写形式互相独立的类组成的。

应用程序中可以没有public类,若有的话至多可以有一个public类。

4.系统环境pathD\jdk\bin;

系统环境classpathD\jdk\jre\lib\rt.jar;.;

5.B

6.Java源文件的扩展名是.java。

Java字节码的扩展名是.class。

7.D

8.

(1)Speak.java

(2)生成两个字节码文件,这些字节码文件的名字Speak.class和Xiti8.class

(3)javaXiti8

(4)执行javaSpeak的错误提示

Exceptioninthread"main"java.lang.NoSuchMethodError:

main

执行javaxiti8得到的错误提示

Exceptioninthread"main"java.lang.NoClassDefFoundError:

xiti8(wrongname:

Xiti8)

执行javaXiti8.class得到的错误提示

Exceptioninthread"main"java.lang.NoClassDefFoundError:

Xiti8/class

执行javaXiti8得到的输出结果

I'mgladtomeetyou

9.属于操作题,解答略。

习题2

1.D

2.【代码1】【代码2】错误//【代码3】更正为floatz=6.89F;

3.float型常量后面必须要有后缀“f”或“F”。

对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。

4.publicclassXiti4{

publicstaticvoidmain(Stringargs[]){

charch1='你',ch2='我',ch3='他';

System.out.println("\""+ch1+"\"的位置:

"+(int)ch1);

System.out.println("\""+ch2+"\"的位置:

"+(int)ch2);

System.out.println("\""+ch3+"\"的位置:

"+(int)ch3);

}

}

5.数组名字.length

6.数组名字.length

7.【代码1】A,65

【代码2】-127

【代码3】123456.783,123456.78312

8.

【代码1】false

【代码2】true

【代码3】false

【代码4】3

【代码5】4.4

【代码6】8.8

习题3

1.输出110

if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。

2.你好好酷!

!

3.

publicclassXiti3_3

{

publicstaticvoidmain(Stringargs[]){

intstartPosition=0,endPosition=0;

charcStart='а',cEnd='я';

startPosition=(int)cStart;//cStart做int型转换据运算,并将结果赋值给startPosition

endPosition=(int)cEnd;//cEnd做int型转换运算,并将结果赋值给endPosition

System.out.println("俄文字母表:

");

for(inti=startPosition;i<=endPosition;i++){

charc='\0';

c=(char)i;//i做char型转换运算,并将结果赋值给c

System.out.print(""+c);

if((i-startPosition+1)%10==0)

System.out.println("");

}

}

}

4.

publicclassXiti4

{publicstaticvoidmain(Stringargs[])

{doublesum=0,a=1;

inti=1;

while(i<=20)

{sum=sum+a;

i++;

a=a*i;

}

System.out.println("sum="+sum);

}

}

5.

classXiti5

{publicstaticvoidmain(Stringargs[])

{inti,j;

for(j=2;j<=100;j++)

{for(i=2;i<=j/2;i++)

{if(j%i==0)

break;

}

if(i>j/2)

{System.out.print(""+j);

}

}

}

}

6.

classXiti6

{publicstaticvoidmain(Stringargs[])

{doublesum=0,a=1,i=1;

while(i<=20)

{sum=sum+a;

i++;

a=(1.0/i)*a;

}

System.out.println("使用while循环计算的sum="+sum);

for(sum=0,i=1,a=1;i<=20;i++)

{a=a*(1.0/i);

sum=sum+a;

}

System.out.println("使用for循环计算的sum="+sum);

}

}

7.

publicclassXiti7

{publicstaticvoidmain(Stringargs[])

{intsum=0,i,j;

for(i=1;i<=1000;i++)

{for(j=1,sum=0;j

{if(i%j==0)

sum=sum+j;

}

if(sum==i)

System.out.println("完数:

"+i);

}

}

}

8.方法之一

importjava.util.Scanner;

publicclassXiti8

{publicstaticvoidmain(Stringargs[]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认");

Scannerreader=newScanner(System.in);

intm=0,n=0,temp=0,gy=0,gb=0,a,b;

a=m=reader.nextInt();

b=n=reader.nextInt();

if(m

{temp=m;

m=n;

n=temp;

}

intr=m%n;

while(r!

=0)

{n=m;

m=r;

r=m%n;

}

gy=n;

gb=a*b/gy;

System.out.println("最大公约数:

"+gy);

System.out.println("最小公倍数:

"+gb);

}

}

8.方法之二

importjava.util.Scanner;

publicclassXiti8{

publicstaticvoidmain(Stringargs[]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认");

Scannerreader=newScanner(System.in);

intm=0,n=0,t=0,gy=0,gb=0;

m=reader.nextInt();

n=reader.nextInt();

if(m>n){

t=m;

m=n;

n=t;

}

for(inti=1;i<=m;i++){

if(m%i==0&&n%i==0){

gy=i;

}

}

gb=m*n/gy;

System.out.println(m+","+n+"的最大公约数为"+gy);

System.out.println(m+","+n+"的最小公倍数为"+gb);

}

}

9.

publicclassXiti9

{publicstaticvoidmain(Stringargs[])

{intn=1;

longsum=0,t=1;

t=n*t;

while(true)

{sum=sum+t;

if(sum>9999)

break;

n++;

t=n*t;

}

System.out.println("满足条件的最大整数:

"+(n-1));

}

}//1至7的阶乘和是sum=5913.0//1至8的阶乘和是sum=46233.0

习题4

1.用该类创建对象时。

2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。

构造方法可以重载。

3.可以。

不可以。

4.不可以。

5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。

那么类变量和实例变量有什么区别呢?

一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。

也就是说对象共享类变量。

6.C,D

7.【代码1】,【代码4】

8.sum=-100

9.27

10.**20

##100

习题5

1.如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。

继承的成员或方法的访问权限保持不变。

如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。

如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。

只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。

子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同,子类如此定义的方法称作子类重写的方法。

子类通过方法的重写可以隐藏继承的方法。

2.不可以。

3.abstract类。

4.假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,称这个A类对象是子类对象的上转型对象。

5.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。

那么该接口变量就可以调用被类实现的接口中的方法。

6.A,C,D

7.15.0

8.0

8.98.0

12

9.

classA

{publicfinalvoidf()

{charcStart='a',cEnd='z';

for(charc=cStart;c<=cEnd;c++)

{System.out.print(""+c);

}

}

}

classBextendsA

{publicvoidg()

{charcStart='α',cEnd='ω';

for(charc=cStart;c<=cEnd;c++)

{System.out.print(""+c);

}

}

}

publicclassXiti9

{publicstaticvoidmain(Stringargs[])

{Bb=newB();

b.f();

b.g();

}

}

10.

classA

{publicintf(inta,intb){

if(b

{inttemp=0;

temp=a;

a=b;

b=temp;

}

intr=b%a;

while(r!

=0)

{b=a;

a=r;

r=b%a;

}

returna;

}

}

classBextendsA

{publicintf(inta,intb)

{intdivision=super.f(a,b);

return(a*b)/division;

}

}

publicclassXiti10

{publicstaticvoidmain(Stringargs[])

{Aa=newA();

Bb=newB();

System.out.println("最大公约数:

"+a.f(36,24));

System.out.println("最小公倍数:

"+b.f(36,24));

}

}

习题6

1.仍然有效。

2.可以。

3.不可以。

4.大家好,祝工作顺利!

5.96

乘数超过99

习题7

1.

(1)Strategy是接口。

(2)Army不是抽象类。

(3)Army和Strategy是关联关系。

(4)StrategyA,StrategyB、StrategyC与Strategy是实现关系。

2.

 

3.

4.例子13的设计符合开-闭原则。

5.例子17的设计符合开-闭原则。

习题8

1.采用新增的策略为选手计算得分。

增加新的具体策略StrategyFour。

StrategyFour类将doublecomputeScore(double[]a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。

importjava.util.Arrays;

publicclassStrategyFourimplementsComputableStrategy{

publicdoublecomputeScore(double[]a){

if(a.length<=2)

return0;

doublescore=0,multi=1;

Arrays.sort(a);

intn=a.length-2;

for(inti=1;i

multi=multi*a[i];

}

score=Math.pow(multi,1.0/n);

returnscore;

}

}

2.

(1)策略(Strategy)PrintCharacter.java

publicinterfacePrintCharacter{

publicabstractvoidprintTable(char[]a,char[]b);

}

(2)具体策略

PrintStrategyOne.java

publicclassPrintStrategyOneimplementsPrintCharacter{

publicvoidprintTable(char[]a,char[]b){

for(inti=0;i

System.out.print(a[i]+",");

}

for(inti=0;i

System.out.print(b[i]+",");

}

System.out.println("");

}

}

PrintStrategyTwo.java

publicclassPrintStrategyTwoimplementsPrintCharacter{

publicvoidprintTable(char[]a,char[]b){

for(inti=0;i

System.out.print(b[i]+","+a[i]+",");

}

}

}

(3)上下文PrintGame.java

publicclassPrintGame{

PrintCharacterstrategy;

publicvoidsetStrategy(PrintCharacterstrategy){

this.strategy=strategy;

}

publicvoidgetPersonScore(char[]a,char[]b){

if(strategy==null)

System.out.println("sorry!

");

else

strategy.printTable(a,b);

}

}

应用以上策略:

publicclassApplication{

publicstaticvoidmain(Stringargs[]){

char[]a=newchar[26];

char[]b=newchar[26];

for(inti=0;i<=25;i++){

a[i]=(char)('a'+i);

}

for(inti=0;i<=25;i++){

b[i]=(char)('A'+i);

}

PrintGamegame=newPrintGame();//上下文对象

game.setStrategy(newPrintStrategyOne());//上下文对象使用策略一

System.out.println("方案1:

");

game.getPersonScore(a,b);

game.setStrategy(newPrintStrategyTwo());//上下文对象使用策略二

System.out.println("方案2:

");

game.getPersonScore(a,b);

}

}

3.参照本章8.3.3自主完成。

习题9

1.A,B,D

2.Love:

Game

3.13

abc夏日

4.13579

5.9javaHello

6.

publicclassXiti6{

publicstaticvoidmain(Stringargs[]){

Strings1,s2,s3,t1="ABCDabcd";

System.out.println("字符串原来是这个样子:

"+t1);

s1=t1.toUpperCase();

System.out.println("字符串中的小写字母变成大写是这个样子:

"+s1);

s2=t1.toLowerCase();

System.out.println("字符串中的大写字母变成小写是这个样子:

"+s2);

s3=s1.concat(s2);

System.out.println("大写字符串连接小写字符串是这个样子:

"+s3);

}

}

7.

classXiti7

{publicstaticvoidmain(Stringargs[])

{Strings="中华人民共和国";

chara=s.charAt(0);

charb=s.charAt(6);

System.out.println("第一个字符:

"+a);

System.out.println("最后一个字符:

"+b);

}

}

8.

importjava.util.*;

classXiti8

{publicstaticvoidmain(Stringargs[]){

intyear,month;

System.out.println("请输入年份和月份,每输入一个数回车确认");

Scannerreader=newScanner(System.in);

year=reader.nextInt();

month=reader.nextInt();

String[]day=newString[42];

System.out.println("日一二三四五六");

Calendarrili=Calendar.getInstance();

rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月

int星期几=rili.get(Calendar.DAY_OF_WEEK)-1;

intdayAmount=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

dayAmount=31;

if(month==4||month==6||month==9||month==11)

dayAmount=30;

if(month==2)

if(((year%4==0)&&(year%100!

=0))||(year%400==0))

dayAmount=29;

else

dayAmount=28;

for(inti=0;i<星期几;i++)

day[i]="";

for(inti=星期几,n=1;i<星期几+dayAmount;i++){

if(n<=9)

day[i]=String.valueOf(n)+"";

else

day[i]=String.valueOf(n);

n++;

}

for(inti=星期几+dayAmount;i<42;i++)

day[i]="";

for(inti=0;i<星期几;i++)

{day[i]="**";

}

for(inti=0;i

{if(i%7==0)

{System.out.println("");

}

System.out.print(""+day[i]);

}

}

}

9.

importjava.util.*;

classXiti9

{publicstaticvoidmain(Stringargs[]){

intyear1,month1,day1,year2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1