Java面向对象程序设计习题解答Word格式.docx
《Java面向对象程序设计习题解答Word格式.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计习题解答Word格式.docx(68页珍藏版)》请在冰豆网上搜索。
3.float型常量后面必须要有后缀“f”或“F”。
对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。
4.publicclassXiti4{
publicstaticvoidmain(Stringargs[]){
charch1='
你'
ch2='
我'
ch3='
他'
;
System.out.println("
\"
"
+ch1+"
的位置:
+(int)ch1);
+ch2+"
+(int)ch2);
+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
{
intstartPosition=0,endPosition=0;
charcStart='
а'
cEnd='
я'
startPosition=(int)cStart;
//cStart做int型转换据运算,并将结果赋值给startPosition
endPosition=(int)cEnd;
//cEnd做int型转换运算,并将结果赋值给endPosition
俄文字母表:
);
for(inti=startPosition;
i<
=endPosition;
i++){
charc='
\0'
c=(char)i;
//i做char型转换运算,并将结果赋值给c
System.out.print("
"
+c);
if((i-startPosition+1)%10==0)
}
4.
publicclassXiti4
{publicstaticvoidmain(Stringargs[])
{doublesum=0,a=1;
inti=1;
while(i<
=20)
{sum=sum+a;
i++;
a=a*i;
sum="
+sum);
5.
classXiti5
{inti,j;
for(j=2;
j<
=100;
j++)
{for(i=2;
=j/2;
i++)
{if(j%i==0)
break;
if(i>
j/2)
{System.out.print("
+j);
6.
classXiti6
{doublesum=0,a=1,i=1;
a=(1.0/i)*a;
使用while循环计算的sum="
for(sum=0,i=1,a=1;
=20;
{a=a*(1.0/i);
sum=sum+a;
使用for循环计算的sum="
7.
publicclassXiti7
{intsum=0,i,j;
for(i=1;
=1000;
{for(j=1,sum=0;
i;
j++)
{if(i%j==0)
sum=sum+j;
if(sum==i)
完数:
+i);
8.方法之一
importjava.util.Scanner;
publicclassXiti8
{publicstaticvoidmain(Stringargs[]){
请输入两个非零正整数,每输入一个数回车确认"
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<
n)
{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;
最大公约数:
+gy);
最小公倍数:
+gb);
8.方法之二
publicclassXiti8{
intm=0,n=0,t=0,gy=0,gb=0;
m=reader.nextInt();
n=reader.nextInt();
if(m>
n){
t=m;
n=t;
for(inti=1;
=m;
if(m%i==0&
&
n%i==0){
gy=i;
gb=m*n/gy;
System.out.println(m+"
"
+n+"
的最大公约数为"
的最小公倍数为"
9.
publicclassXiti9
{intn=1;
longsum=0,t=1;
t=n*t;
while(true)
{sum=sum+t;
if(sum>
9999)
n++;
满足条件的最大整数:
+(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
classA
{publicfinalvoidf()
{charcStart='
a'
z'
for(charc=cStart;
c<
=cEnd;
c++)
classBextendsA
{publicvoidg()
α'
ω'
publicclassXiti9
{publicstaticvoidmain(Stringargs[])
{Bb=newB();
b.f();
b.g();
10.
{publicintf(inta,intb){
if(b<
a)
{inttemp=0;
temp=a;
a=b;
b=temp;
intr=b%a;
{b=a;
a=r;
r=b%a;
returna;
{publicintf(inta,intb)
{intdivision=super.f(a,b);
return(a*b)/division;
publicclassXiti10
{Aa=newA();
Bb=newB();
+a.f(36,24));
+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是实现关系。
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;
a.length-1;
i++){
multi=multi*a[i];
score=Math.pow(multi,1.0/n);
returnscore;
(1)策略(Strategy)PrintCharacter.java
publicinterfacePrintCharacter{
publicabstractvoidprintTable(char[]a,char[]b);
(2)具体策略
PrintStrategyOne.java
publicclassPrintStrategyOneimplementsPrintCharacter{
publicvoidprintTable(char[]a,char[]b){
for(inti=0;
a.length;
System.out.print(a[i]+"
b.length;
System.out.print(b[i]+"
PrintStrategyTwo.java
publicclassPrintStrategyTwoimplementsPrintCharacter{
+a[i]+"
(3)上下文PrintGame.java
publicclassPrintGame{
PrintCharacterstrategy;
publicvoidsetStrategy(PrintCharacterstrategy){
this.strategy=strategy;
publicvoidgetPersonScore(char[]a,char[]b){
if(strategy==null)
sorry!
else
strategy.printTable(a,b);
应用以上策略:
publicclassApplication{
publicstaticvoidmain(Stringargs[]){
char[]a=newchar[26];
char[]b=newchar[26];
=25;
a[i]=(char)('
b[i]=(char)('
A'
PrintGamegame=newPrintGame();
//上下文对象
game.setStrategy(newPrintStrategyOne());
//上下文对象使用策略一
方案1:
game.getPersonScore(a,b);
game.setStrategy(newPrintStrategyTwo());
//上下文对象使用策略二
方案2:
3.参照本章8.3.3自主完成。
习题9
1.A,B,D
2.Love:
Game
3.13
abc夏日
4.13579
5.9javaHello
publicclassXiti6{
publicstaticvoidmain(Stringargs[]){
Strings1,s2,s3,t1="
ABCDabcd"
字符串原来是这个样子:
+t1);
s1=t1.toUpperCase();
字符串中的小写字母变成大写是这个样子:
+s1);
s2=t1.toLowerCase();
字符串中的大写字母变成小写是这个样子:
+s2);
s3=s1.concat(s2);
大写字符串连接小写字符串是这个样子:
+s3);
classXiti7
{publicstaticvoidmain(Stringargs[])
{Strings="
中华人民共和国"
chara=s.charAt(0);
charb=s.charAt(6);
第一个字符:
+a);
最后一个字符:
+b);
importjava.util.*;
classXiti8
{publicstaticvoidmain(Stringargs[]){
intyear,month;
请输入年份和月份,每输入一个数回车确认"
year=reader.nextInt();
month=reader.nextInt();
String[]day=newString[42];
日一二三四五六"
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;
dayAmount=28;
星期几;
day[i]="
for(inti=星期几,n=1;
星期几+dayAmount;
if(n<
=9)
day[i]=String.valueOf(n)+"
;
else
day[i]=String.valueOf(n);
for(inti=星期几+dayAmount;
42;
{day[i]="
**"
day.length;
i++)
{if(i%7==0)
{System.out.println("
+day[i]);
classXiti9
intyear1,month1,day1,year2