Java面向对象程序设计第版课后答案.docx
《Java面向对象程序设计第版课后答案.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计第版课后答案.docx(49页珍藏版)》请在冰豆网上搜索。
Java面向对象程序设计第版课后答案
TheponywasrevisedinJanuary2021
Java面向对象程序设计
(编着耿祥义张跃平)
习题1
1.JamesGosling
2.
(1)使用一个文本编辑器编写源文件。
(2)使用Java编译器()编译Java源程序,得到字节码文件。
(3)使用Java解释器()运行Java程序
3.Java的源文件是由若干个书写形式互相独立的类组成的。
应用程序中可以没有public类,若有的话至多可以有一个public类。
4.系统环境pathD\jdk\bin;
系统环境classpathD\jdk\jre\lib\;.;
5.B
6.Java源文件的扩展名是.java。
Java字节码的扩展名是.class。
7.D
8.
(1)
(2)生成两个字节码文件,这些字节码文件的名字和
(3)javaXiti8
(4)执行javaSpeak的错误提示
Exceptioninthread"main"main
执行javaxiti8得到的错误提示
Exceptioninthread"main"xiti8(wrongname:
Xiti8)
执行java得到的错误提示
Exceptioninthread"main"Xiti8/class
执行javaXiti8得到的输出结果
I'mgladtomeetyou
9.属于操作题,解答略。
习题2
1.D
2.【代码1】【代码2】错误ength
6.数组名字.length
7.【代码1】A,65
【代码2】-127
【代码3】,
【代码1】false
【代码2】true
【代码3】false
【代码4】3
【代码5】
【代码6】
习题3
输出110
if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。
2.你好好酷!
!
3.
publicclassXiti3_3
{
publicstaticvoidmain(Stringargs[]){
intstartPosition=0,endPosition=0;
charcStart='а',cEnd='я';
startPosition=(int)cStart;**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.
12
9.
classA
{publicfinalvoidf()
{charcStart='a',cEnd='z';
for(charc=cStart;c<=cEnd;c++)
{""+c);
}
classBextendsA
{publicvoidg()
{charcStart='α',cEnd='ω';
publicclassXiti9
{publicstaticvoidmain(Stringargs[])
{Bb=newB();
();
10.
{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=(a,b);return(a*b)/division;}}publicclassXiti10{publicstaticvoidmain(Stringargs[]){Aa=newA();Bb=newB();"最大公约数:"+(36,24));"最小公倍数:"+(36,24));}}习题61.仍然有效。2.可以。3.不可以。4.大家好,祝工作顺利!5.96乘数超过99习题71.(1)Strategy是接口。(2)Army不是抽象类。(3)Army和Strategy是关联关系。(4)StrategyA,StrategyB、StrategyC与Strategy是实现关系。2.3.4.例子13的设计符合开-闭原则。5.例子17的设计符合开-闭原则。习题8采用新增的策略为选手计算得分。增加新的具体策略StrategyFour。StrategyFour类将doublecomputeScore(double[]a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。importclassStrategyFourimplementsComputableStrategy{publicdoublecomputeScore(double[]a){if<=2)return0;doublescore=0,multi=1;(a);intn=;for(inti=1;i<;i++){multi=multi*a[i];}score=(multi,n);returnscore;}}2.(1)策略(Strategy)publicinterfacePrintCharacter{publicabstractvoidprintTable(char[]a,char[]b);}(2)具体策略publicclassPrintStrategyOneimplementsPrintCharacter{publicvoidprintTable(char[]a,char[]b){for(inti=0;i<;i++){",");}for(inti=0;i<;i++){",");}"");}}publicclassPrintStrategyTwoimplementsPrintCharacter{publicvoidprintTable(char[]a,char[]b){for(inti=0;i<;i++){","+a[i]+",");}}}(3)上下文publicclassPrintGame{PrintCharacterstrategy;publicvoidsetStrategy(PrintCharacterstrategy){=strategy;}publicvoidgetPersonScore(char[]a,char[]b){if(strategy==null)"sorry!");else(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();;classXiti8{publicstaticvoidmain(Stringargs[]){intyear,month;"请输入年份和月份,每输入一个数回车确认");Scannerreader=newScanner;year=();month=();String[]day=newString[42];"日一二三四五六");Calendarrili=();(year,month-1,1);.11表示十二月int星期几=-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;elsedayAmount=28;for(inti=0;i<星期几;i++)day[i]="";for(inti=星期几,n=1;i<星期几+dayAmount;i++){if(n<=9)day[i]=(n)+"";elseday[i]=(n);n++;}for(inti=星期几+dayAmount;i<42;i++)day[i]="";for(inti=0;i<星期几;i++){day[i]="**";}for(inti=0;i<;i++){if(i%7==0){"");}""+day[i]);}}}9.import.*;classXiti9{publicstaticvoidmain(Stringargs[]){intyear1,month1,day1,year2,month2,day2;Scannerreader=newScanner;"请输入第一个日期的年份月份日期,每输入一个数回车确认");year1=();month1=();day1=();"请输入第二个日期的年份月份日期,每输入一个数回车确认");year2=();month2=();day2=();Calendarcalendar=();(year1,month1,day1);longtimeYear1=();(year2,month2,day2);longtimeYear2=();long相隔天数=((timeYear1-timeYear2)/(1000*60*60*24));""+year1+"年"+month1+"月"+day1+"日和"+year2+"年"+month2+"月"+day2+"日相隔"+相隔天数+"天");}}10.publicclassXiti10{publicstaticvoidmain(Stringargs[]){doublea=0,b=0,c=0;a=12;b=24;c=(a,b);c=(a,b);c=(2,3);c=;c=;c=;c=(1);c=(8);}}习题101.BorderLayout布局。2.不可以。3.A,C。4.import.*;importimport.*;publicclassXiti4{publicstaticvoidmain(Stringargs[]){ComputerFramefr=newComputerFrame();("计算的窗口");}}classComputerFrameextendsJFrameimplementsTextListener{TextAreatext1,text2;intcount=1;doublesum=0,aver=0;publicComputerFrame(){setLayout(newFlowLayout());text1=newTextArea(6,20);text2=newTextArea(6,20);add(text1);add(text2);(false);(this);setSize(300,320);setVisible(true);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);}});validate();}publicvoidtextValueChanged(TextEvente){Strings=();sum=0;aver=0;StringTokenizerfenxi=newStringTokenizer(s,",'\n'");intn=();count=n;doublea[]=newdouble[n];for(inti=0;i<=n-1;i++){Stringtemp=();try{a[i]=(temp);sum=sum+a[i];}catch(Exceptionee){count--;}}aver=sum/count;(null);("\n和:"+sum);("\n平均值:"+aver);}}5.import.*;import.*;importpublicclassXiti5{publicstaticvoidmain(Stringargs[]){ComputerFramefr=newComputerFrame();("计算");}}classComputerFrameextendsFrameimplementsActionListener{TextFieldtext1,text2,text3;Buttonbutton1,button2,button3,button4;Labellabel;publicComputerFrame(){setLayout(newFlowLayout());text1=newTextField(10);text2=newTextField(10);text3=newTextField(10);label=newLabel("",;;add(text1);add(label);add(text2);add(text3);button1=newButton("加");button2=newButton("减");button3=newButton("乘");button4=newButton("除");add(button1);add(button2);add(button3);add(button4);(this);(this);(this);(this);setSize(300,320);setVisible(true);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);}});validate();}publicvoidactionPerformed(ActionEvente){doublen;if()==button1){doublen1,n2;try{n1=());n2=());n=n1+n2;(n));("+");}catch(NumberFormatExceptionee){("请输入数字字符");}}elseif()==button2){doublen1,n2;try{n1=());n2=());n=n1-n2;(n));("-");}catch(NumberFormatExceptionee){("请输入数字字符");}}elseif()==button3){doublen1,n2;try{n1=());n2=());n=n1*n2;(n));("*");}catch(NumberFormatExceptionee){("请输入数字字符");}}elseif()==button4){doublen1,n2;try{n1=());n2=());n=n1/n2;(n));("/");}catch(NumberFormatExceptionee){("请输入数字字符");}}validate();}}6.import.*;import.*;publicclassXiti6{publicstaticvoidmain(Stringargs[]){newWindowPanel();}}classMypanelextendsJPanelimplementsActionListener{Buttonbutton;TextFieldtext;Mypanel(){button=newButton("");text=newTextField(12);add(button);add(text);(this);}publicvoidactionPerformed(ActionEvente){Stringname=();if()>0)(name);validate();}}classWindowPanelextendsFrame{Mypanelpanel1,panel2;WindowPanel(){panel1=newMypanel();panel2=newMypanel();;;add(panel1,;add(panel2,;setSize(300,320);setVisible(true);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);}});validate();}}7.参见,参照本章例子。8.import.*;import.*;publicclassXiti8{publicstaticvoidmain(Stringargs[]){MoveFramef=newMoveFrame();(12,12,300,300);(true);("移动");();f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);}});}}classMoveFrameextendsJFrameimplementsActionListener{JButtoncontrolButton,movedButton;publicMoveFrame(){controlButton=newJButton("单击我运动另一个按钮");(this);movedButton=newJButton();(newColor(12,200,34));setLayout(null);add(controlButton);add(movedButton);(10,30,130,30);(100,100,10,10);}publicvoidactionPerformed(ActionEvente){intx=().x;inty=().y;x=x+5;y=y+1;(x,y);if(x>200){x=100;y=100;}}}9.import.*;importclassXiti9{publicstaticvoidmain(Stringargs[]){Winwin=newWin();}}classWinextendsFrameimp
{inttemp=0;
temp=a;
a=b;
b=temp;
intr=b%a;
while(r!
=0)
{b=a;
a=r;
r=b%a;
returna;
{publicintf(inta,intb)
{intdivision=(a,b);
return(a*b)/division;
publicclassXiti10
{Aa=newA();
Bb=newB();
"最大公约数:
"+(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
采用新增的策略为选手计算得分。
增加新的具体策略StrategyFour。
StrategyFour类将doublecomputeScore(double[]a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。
importclassStrategyFourimplementsComputableStrategy{
publicdoublecomputeScore(double[]a){
if<=2)
return0;
doublescore=0,multi=1;
(a);
intn=;
for(inti=1;i<;i++){
multi=multi*a[i];
score=(multi,n);
returnscore;
(1)策略(Strategy)
publicinterfacePrintCharacter{
publicabstractvoidprintTable(char[]a,char[]b);
(2)具体策略
publicclassPrintStrategyOneimplementsPrintCharacter{
publicvoidprintTable(char[]a,char[]b){
for(inti=0;i<;i++){
",");
"");
publicclassPrintStrategyTwoimplementsPrintCharacter{
","+a[i]+",");
(3)上下文
publicclassPrintGame{
PrintCharacterstrategy;
publicvoidsetStrategy(PrintCharacterstrategy){
=strategy;
publicvoidgetPersonScore(char[]a,char[]b){
if(strategy==null)
"sorry!
");
else
(a,b);
应用以上策略:
publicclassApplication{
char[]a=newchar[26];
char[]b=newchar[26];
for(inti=0;i<=25;i++){
a[i]=(char)('a'+i);
b[i]=(char)('A'+i);
PrintGamegame=newPrintGame();;
classXiti8
{publicstaticvoidmain(Stringargs[]){
intyear,month;
"请输入年份和月份,每输入一个数回车确认");
Scannerreader=newScanner;
year=();
month=();
String[]day=newString[42];
"日一二三四五六");
Calendarrili=();
(year,month-1,1);.11表示十二月
int星期几=-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;
for(inti=0;i<星期几;i++)
day[i]="";
for(inti=星期几,n=1;i<星期几+dayAmount;i++){
if(n<=9)
day[i]=(n)+"";
day[i]=(n);
n++;
for(inti=星期几+dayAmount;i<42;i++)
{day[i]="**";
for(inti=0;i<;i++)
{if(i%7==0)
{"");
""+day[i]);
import.*;
classXiti9
intyear1,month1,day1,year2,month2,day2;
"请输入第一个日期的年份月份日期,每输入一个数回车确认");
year1=();
month1=();
day1=();
"请输入第二个日期的年份月份日期,每输入一个数回车确认");
year2=();
month2=();
day2=();
Calendarcalendar=();
(year1,month1,day1);
longtimeYear1=();
(year2,month2,day2);
longtimeYear2=();
long相隔天数=((timeYear1-timeYear2)/(1000*60*60*24));
""+year1+"年"+month1+"月"+day1+"日和"+
year2+"年"+month2+"月"+day2+"日相隔"+相隔天数+"天");
{doublea=0,b=0,c=0;
a=12;
b=24;
c=(a,b);
c=(2,3);
c=;
c=
(1);
c=(8);
习题10
1.BorderLayout布局。
3.A,C。
4.
import
publicclassXiti4
{ComputerFramefr=newComputerFrame();
("计算的窗口");
classComputerFrameextendsJFrameimplementsTextListener
{TextAreatext1,text2;
intcount=1;
doublesum=0,aver=0;
publicComputerFrame()
{setLayout(newFlowLayout());
text1=newTextArea(6,20);
text2=newTextArea(6,20);
add(text1);
add(text2);
(false);
(this);
setSize(300,320);
setVisible(true);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{(0);
});
validate();
publicvoidtextValueChanged(TextEvente)
{Strings=();
sum=0;
aver=0;
StringTokenizerfenxi=newStringTokenizer(s,",'\n'");
intn=();
count=n;
doublea[]=newdouble[n];
for(inti=0;i<=n-1;i++)
{Stringtemp=();
try{a[i]=(temp);
sum=sum+a[i];
catch(Exceptionee)
{count--;
aver=sum/count;
(null);
("\n和:
"+sum);
("\n平均值:
"+aver);
5.
publicclassXiti5
("计算");
classComputerFrameextendsFrameimplementsActionListener
{TextFieldtext1,text2,text3;
Buttonbutton1,button2,button3,button4;
Labellabel;
text1=newTextField(10);
text2=newTextField(10);
text3=newTextField(10);
label=newLabel("",;
;
add(label);
add(text3);
button1=newButton("加");
button2=newButton("减");
button3=newButton("乘");
button4=newButton("除");
add(button1);
add(button2);
add(button3);
add(button4);
publicvoidactionPerformed(ActionEvente)
{doublen;
if()==button1)
{doublen1,n2;
try{n1=());
n2=());
n=n1+n2;
(n));
("+");
catch(NumberFormatExceptionee)
{("请输入数字字符");
elseif()==button2)
n=n1-n2;
("-");
elseif()==button3)
n=n1*n2;
("*");
elseif()==button4)
n=n1/n2;
("/");
6.
publicclassXiti6
{newWindowPanel();
classMypanelextendsJPanelimplementsActionListener
{Buttonbutton;
TextFieldtext;
Mypanel()
{button=newButton("");
text=newTextField(12);
add(button);
add(text);
{Stringname=();
if()>0)
(name);
classWindowPanelextendsFrame
{Mypanelpanel1,panel2;
WindowPanel()
{panel1=newMypanel();
panel2=newMypanel();
add(panel1,;
add(panel2,;
7.参见,参照本章例子。
publicclassXiti8
{MoveFramef=newMoveFrame();
(12,12,300,300);
(true);
("移动");
f.addWindowListener(newWindowAdapter()
);
classMoveFrameextendsJFrameimplementsActionListener
{JButtoncontrolButton,movedButton;
publicMoveFrame()
{controlButton=newJButton("单击我运动另一个按钮");
movedButton=newJButton();
(newColor(12,200,34));
setLayout(null);
add(controlButton);
add(movedButton);
(10,30,130,30);
(100,100,10,10);
{intx=().x;
inty=().y;
x=x+5;
y=y+1;
(x,y);
if(x>200)
{x=100;
y=100;
importclassXiti9
{Winwin=newWin();
classWinextendsFrameimp
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1