Java2教程(第三版)课后习题参考答案(一)_第1页
Java2教程(第三版)课后习题参考答案(一)_第2页
Java2教程(第三版)课后习题参考答案(一)_第3页
Java2教程(第三版)课后习题参考答案(一)_第4页
Java2教程(第三版)课后习题参考答案(一)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课后习题参考答案,保证你满意

第1章Java入门

1.开发与运行Java程序需要经过哪些主要步骤和过程?

答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为.java

(2)编译Java源文件:使用Java编译器(javac.exe)。得到字节码文件*.class

(3)运行Java程序:Java应用程序使用Java解释器(java,exe)执行字节码文件;

Java小应用程序使用支持Java标准的浏览器来执行。

2.怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?

答:①应用程序必须有main方法,这个方法是程序执行的入口。

小应用程序没有main方法。

②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。

3.Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的?

答:①Java程序由类组成。

②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。

③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java:

有多个类时,如果有public类(最多一个),源文件名与public类的类

名相同,拓展名是.java:没有public类,源文件名与任何一个类的类名

相同即可,拓展名为.java。

小应用程序:源文件名与主类的类名相同,拓展名是.java。

4.在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。如果不使用

codebase属性,小程序的字节码文件必须和运行它的HTML文件在同•目录中。编写一个小程序并将小程序

的字节码存放在某个目录中,比如C:\5000;把运行该小程序的HTML文件(注意其中的codebase属性):

<appletcode=你的小程序的字节码width-200height-300codebase=C:\5000>

</applet>

存放在另一个目录中。

答:以书中小应用程序为例进行说明:

①编写Java小应用程序源代码

importjava,applet.*;

importjava.awt.*;

publicclassBoyextendsApplet

(

publicvoidpaint(Graphicsg)

(

g.setColor(Color,red);

g.drawString("我•边喝着咖啡,•边学Java呢”,5,30);

g.setColor(Color,blue);

g.drawString(〃我学得很认真”,10,50);

}

}

②将上述代码命名为Boy.java并进行编译得到Boy.class字节码文件:将得到的字节码文件存放在

C:\5000文件夹下;

③编写小应用程序的HTML源文件:

<appletcode=Boy.classwdith=200height=300codebase=C:\5000></applet>

④将上述编写好的代码命名为Boy.hlml;并将此文件存放在C:\5000文件夹以外的任意一个文件夹中(如

C:\1000):

⑤运行Boy.hlml。

第2章标识符、关键字和数据类型

1.什么叫标识符?标识符的规则是什么?

答:①用来标识类名、变量名、、方法名、类型名、数组名、文件名的有效字符序列。

②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标识符。

2.什么叫关键字?请说出5个关键字。

答:①Java语言中已经被赋予特定意义的一些单词。

②classbreakpublicreturnstaticextends等。

3.Java的基本数据类型都是什么?

答:boolean(逻辑型)char(字符型)floatsdouble(浮点型)byte、short、int、long(整型)。

4.下列哪些语句是错误的:

intx=8;

byteb=127;

b二x;

答:b=x语句错误:原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x;。

5.卜.列程序的输出结果是什么?

publicclassE

(

publicstaticvoidmain(Stringargs[])

(

long[]a={l,2,3,4}:

long[]b={100,200,300,400,500);

b=a;

System,out.printIn(“数组b的长度:"+b.length);

System.out.print1n(*b[0]=,,+b[0]);

)

)

答:数组b的长度:4

b[0]=l

6.上机运行下列程序,注意观察输出结果。

publicclassE

{

publicstaticvoidmain(Stringargs[])

(

for(inti=20302;i<20322;i++)

System,out.printIn((char)i);

)

)

答:低住佐佑侠体估何能佗余余佚佛作佝佞佟你价

7.System.out,printIn("你好");可输出字符串,也可以使用System.out.printing)输出变量或表达

式的值,只需使用并置符号“+”将变量、表达式或一个常数值与一个字符串并置即可,如:

System.out.printIn(w”+x);System,out.println(+123+“大于"+122);等。上机调试卜列程序,

注意观察结果,特别注意System.out.print()和System.out.println()的区别。

publicclassOutputData

(

publicstaticvoidmain(Stringargs[])

(

intx=234,y=432;

System.out.printIn(x+“<”+(2*x));

System.out.print("我输出结果后不回车");

System.out.printin("我输出结果后自动回车到下一行“);

System,out.printinC/x+y="+(x+y));

System.out.printing"+x+y+”=234432");

)

)

答:234<468

我输出结果后不回车我输出结果后自动回车到下一行

x+y=666

234432=234432

8.编写一个Java应用程序,输出全部的希腊字母。

答:

publicclassa

(

publicstaticvoidmain(Stringargs[])

{System.out.println("这是我的第一个程序”);}

}第3章运算符、表达式和语句

i.下列程序的输出结果是什么?

publicclassE

(

publicstaticvoidmain(Stringargs口)

{

charx='你',y="e',z=,吃,;

if(x>'A')

{

y='爱’;

z='情;

}

else

y='我';

z='她’;

System,out.println(*“+x+y+z);

)

)

答:你爱她

2.卜列程序的输出结果是什么?

publicclassE3

(

publicstaticvoidmain(Stringargs[])

(

charc=,\0';

for(inti=1;i<=4;i++)

(

switch(i)

(

case1:c='b';

System.out.print(c):

case2:c='e;

System,out.print(c):

break;

case3:c=,p';

System.out.print(c);

default:

System.out.print("!");

)

)

)

)

答:beep!!

3.编写应用程序,求1!+2!+-+10!o

答:

classFact

(

publicstaticvoidmain(Stringargs[])

(

intfact,sum=0;

for(inti=l;i<=10;i++)

(

fact=l;

for(intj=l;j<=i;j++)

fact*二j;

sum+=fact;

}

System.out.println(〃l到10的阶乘之和是:"+sum);

4.编写一个应用程序,求100以内的全部素数。

答:

classPrimes

(

publicstaticvoidmain(Stringargs口)

(

intw=l;

for(inti=2;i<=100;i++)

(

for(intj=2;j<i;j++)

(

if(w==0)

break;

)

if(w!=0)

System.out.println(i+"是素数〃);

}

)

)

5.分别用do-while和for循环计算1+1/2!+1/3!+1/4!+…的前20项和。

答:①for循环

classSum

(

publicstaticvoidmain(Stringargs[])

(

intfact;

doublesum=0;

for(inti=l;i<=20;i++)

(

fact=l;

for(intj=l;j<=i;j++)

fact*=j;

sum+=L0/fact;

}

System.out.println(sum);

)

}

②do—whiIe循环

classSum

publicstaticvoidmain(Stringargs[])

inti=1;

intfact;

doublesum=0;

do

(

fact=l;

intj=0;

while(++j<=i)

fact*二j;

sum+=l.0/fact;

}

while(++i<=20);

System,out.println(sum);

}

}

6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000之内的所有完数。

答:

classWanshu

{

publicstaticvoidmain(Stringargs[])

(

intx,i,sum;

for(x=l;x<=1000;x++)

(

sum=0:

for(i=l;i<x;i++)

(

if(x%i==0)

sum+=i;

)

if(x==sum)

System.out.printIn(x+"是完数”);

)

)

)

7.编写应用程序,分别使用while和for循环计算8+88+888+…前10项之和。

答:①for循环

classTheSum

(

publicstaticvoidmain(Stringargs[])

(

longsum=0,data=8;

for(inti=l;i<=10;i++)

sum=sum+dala;

data=data*10+8;

}

System,out.println(sum);

)

)

②while循环

classTheSum

(

publicstaticvoidmain(Stringargs[])

(

longsum=0,data=8,i=0;

while(++i<=10)

(

sum=sum+data;

data=data*10+8;

)

System,out.println(sum);

)

)

8.编写应用程序,输出满足1+2+3+…+n<8888的最大正整数n。

答:

classMaxn

(

publicstaticvoidmain(Stringargs[])

(

intk=l,sum=0;

while((sum+=k)<8888)

k++;

k一;

System,out.printIn(〃最大能取到:"+k);

)

}

第4章类、对象和接口

1.类中的实例变量在什么时候会被分配内存空间?

答:当该类创建对象之后,实例变量才会被分配相应的内存空间。

2.什么叫方法的重载?构造方法可以重载吗?

答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,

或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。

②构造方法可以重载。

3.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?

答:①类中的实例方法可以操作类变量。

②类方法不可以操作实例变量

4.类中的实例方法可以用类名直接调用吗?

答:类中的实例方法不可以用类名直接调用。

5.举例说明protected方法和友好方法的区别。

答:当子类与父类不在同一个包中时,子类可以继承父类的protected方法:而友好方法此时则不能被子类

继承。

6.举例说明类变量和实例变量的区别。

答:⑴书写:定义成员变量时,类变量有static修饰;实例变量没有static修饰。

例:classA

(

intx;〃实例变量

staticinty;〃类变量

)

⑵内存:不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。

不同对象的实例变量被分配不同的内存空间:不同对象的类变量被分配相同的内存空间。

任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。

一个对象的实例变量发生改变,不影响其他对象的相应实例变量。

例:执行语句:Al.x=10;Al.y=20;

这时A2.x的值也是10;而A2.y的值保持原来的初值。

⑶使用:类变量可以被类方法操作;而实例变量不能被类方法操作。

例:classA

(

intx;

staticinty;

staticvoidfunc()

(

b=10;〃合法

a=20;〃非法

)

)

类变量可以通过类名访问;实例变量不能通过类名访问。

例:classA

{

intx;

staticinty;

)

classB

(

publicvoidfunc();

A.x=10;〃非法

A.y=20;//合法

7.子类将继承父类的哪些成员变量和方法?子类在什么情况下隐藏父类的成员变量和方法?在子类中是

否允许有一个方法和父类的方法名字相同,而类型不同?

答:①子类和父类在同一个包中时,子类可以继承父类的除private属性的所有方法和成员变量,当子类与

父类不在同一■个包中时,子类只能继承父类的protected和public属性的成员变量和方法。

②子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类中定义一个方

法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同,子类就隐藏从父类

继承来的方法(方法的重写)。

③在子类中允许有一个方法和父类的方法名字相同而类型不同。

8.父类的final方法可以被子类重写吗?

答:父类的final方法不能被子类重写。

9.什么类中可以有abstract方法?

答:abstract类中可以有abstract方法。

10.什么叫对象的上转型对象?

答:B类是A类的子类或间接子类,当用子类B创建一个对象b并把这个对象的引用放到A类的对象a中时,称A

类对象a是子类对象b的上转型对象。

11.什么叫接口的回调?

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

12.下列程序有什么错误?

publicclassTakecare

inta=90;

staticfloatb=10.98f;

publicstaticvoidmain(Stringargs[])

(

f1oatc=a+b;

System.out.printIn(z,c=z,+c);

)

)

答:语句floatc=a+b;错误。原因是类方法main操作了实例变量a。

13.请写出下列程序的输出结果。

classA

{

publicintf(intx)

(

returnx+1;

}

)

classBextendsA

publicintf(intx)

returnx*x;

)

}

publicclassE

(

publicstaticvoidmain(Stringargs[])

(

Aa=newB();

intm=a.f(10);

System,out.printIn(m);

}

)

答:100

14.请写出下列程序的输出结果。

classA

{

intx;

publicvoidsetX(intx)

(

this.x=x;

)

intgetXO

returnx;

}

}

classB

(

publicvoidf(Aa)

(

a.setX(100);

)

)

publicclassE

(

publicstaticvoidmain(Stringargs[])

Aa=newA();

a.setX(8);

System,out.printIn(a.getXO);

Bb=newB();

b.f(a);

System,out.printin(a.getXO);

)

)

答:8

100

15.使用接口有哪些注意事项?模仿例子4.27,编写一个类实现两个接口的程序。

答:①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;

使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、

参数个数及类型必须与接口中的完全一致:类在实现接口时,方法体一定要用public修饰,如果接口方法

的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。

②interface表面积

(

doubleallArea(doubler);

)

interface体积

{

doublevolu(doubler);

)

classSphimplements表面积,体积

(

doublePI=3.14159;

publicdoubleallArea(doubler)

(

return4*PI*r*r;

publicdoublevolu(doubler)

(

return4.0/3*PI*r*r*r;

)

}

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

doubler=5.0;

Spha=newSph();

System,out.printIn(〃半径为5的球的表面积是:〃+a.al1Area(r));

System.out.printin("半径为5的球的体积是:"+a.volu(r));

16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子

类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子

类新增的方法g输出希腊字母表。

答:classA

(

intm;

voidf()

(

for(m=65;m<91;m++)

System,out.print((char)m+z,");

for(m=97;m<123;m++)

System,out.print((char)m+z,");

System,out.printIn(*");

)

}

classBextendsA

(

inti;

voidg()

(

for(i=913;i<930;i++)

System,out.print((char)");

for(i=931;i<938;i++)

System,out.print((char)i+z,");

for(i=945;i<962;i++)

System,out.print((char)");

for(i=963;i<970;i++)

System,out.print((char)");

System,out.printInC*");

}

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Bb=newB();

System.out.printin("我调用方法f输出英文字母表:”);

b.f();

System.out.printin(〃我调用方法g输出希腊字母表:“);

b.g();

)

}

17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoid

speak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyExceplion对象。最后编

写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。

答:classMyExceptionextendsException

(

Stringstrl;

MyException(intm)

(

strl=m+"出现错误可能造成的原因是取值大于1000〃;

}

publicvoidshowStr1()

(

System,out.println(strl);

)

)

classStudent

(

publicvoidspeak(intm)throwsMyException

{

if(m>1000)

(

MyExceptionexception=newMyException(m);

throwexception;

}

else

System,out.println(m);

}

}

publicclassTest

publicstaticvoidmain(Stringagrs[])

(

intm;

Studentstul=newStudent();

m=987;

try

stul.speak(m);

m=1234;

stul.speak(m);

)

catch(MyExceptione)

(

e.showStr1();

}

)

}

18.编写一个类,该类有一个方法publicintf(inta,intb),该方法返回a和b的最大公约数。然后再编

写一个该类的子类,要求子类重写方法3而且重写的方法将返Ria和b的最小公倍数。要求在重写的方法的

方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。要求在应用程序的主

类中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。

答:classA

(

publicintf(inta,intb)

{

if(a<b)

{

inttemp=0;

temp二a;

a=b;

b二temp;

)

intr=a%b;

while(r!=0)

(

a=b;

b二r;

r=a%b;

)

returnb;

)

)

classBextendsA

publicintf(inta,intb)

intm;

m二super,f(a,b);

return(a*b)/m;

)

publicclassTest

(

publicstaticvoidmain(Stringargs口)

{

Aa=newA();

System.out.printIn(“18和102的最大公约数是:"+a,f(18,102));

Bb=newB();

System.out.println(〃18和102的最小公倍数是:"+b.f(18,102));

)

)

第5章字符串

1.使用String类的publicStringtoUpperCase()方

法可以将一个字符串中的小写字母变成大写字母,使

用publicStringtoLowerCase()方法可以将一个字

符串中的大写字母变成小写字母。编写一个程序,使

用这两个方法实现大小写的转换。

答:classTest

(

publicstaticvoidmain(Stringargs[])

(

Stringstr=〃IcanuseJava”;

System,out.printin(〃要转换的字符串是:〃+str);

Strings=str.toUpperCase();

System.out.printin(〃转换成大写字符串是:〃+s);

s=str.toLowerCase();

System.out.printin(〃转换成小写字符串是:〃+s);

2.使用String类的publicStringconcat(String

str)方法可以把调用该方法的字符串与参数指定的

字符串连接,把str指定的串连接到当前串的尾部获

得一个新的串。编写一个程序通过连接两个串得到一

个新串,并输出这个新串。

答:classTest

(

publicstaticvoidmain(Stringargs[])

(

Stringstrl二〃Icanu〃;

Stringstr2二〃seJava”;

Strings=strl.concat(str2);

System,out.printin(〃将字符串〃+strl+〃与字符串

〃+str2+〃连接后得到的新字符串是:〃);

System,out.printin(s);

3.String类的publiccharcharAt(intindex)方法

可以得到当前字符串index位置上的一个字符。说出下

列程序的输出结果。

publicclassE3

(

publicstaticvoidmain(Stringargs[])

(

Strings二〃中国科学技术大学〃;

chara=s.charAt(2),b=s.charAt(6);

System,out.print(a);

System,out.printin(b);

}

)

答:科大

4.使用java,util包中的Arrays类的静态方法public

staticvoidsort(doublea[])可以把参数a指定的

double型数组按升序排序,使用java,util包中的

Arrays类的静态方法publicstaticvoid

sort(doublea[],intstart,intend)可以把参数a

指定的double型数组中从位置start到endT位置的数

按升序排序。写出下列程序的输出结果。

importjava.util.*;

publicclassE4

publicstaticvoidmain(Stringargs[])

inta□={23,67,89,90,-987};

double

b[]={12.89,90.87,34,678,987,-98.78,0.89};

Arrays,sort(a);

Arrays,sort(b,1,4);

for(inti=0;i<=4;i++)

(

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

}

for(inti=0;i<b.length;i++)

(

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

口•

-987,23,67,89,90,12.89,34.0,90.87,678.987,-98.

78,0.89,

5.使用java,lang包中System类的静态方法

arraycopy可以实现数组的快速复制,上机实习下列程

序,并总结出arraycopy方法参数的使用规则。

publicclassArrayCopy

(

publicstaticvoidmain(Stringargs[])

(

char

al□二

3''4','5','6'};

System,arraycopy(al,0,bl,1,al.length-1);

System,out.printin(newString(al));

System.out.printin(newString(bl));

byte

a2[]={97,98,99,100,101,102},b2[]={65,67,68,69,

70,71);

System,arraycopy(b2,0,a2,3,b2.length-3);

System,out.printin(newString(a2));

System.out.printin(newString(b2));

)

)

答:①运行结果:abcdef

1abode

abcACD

ACDEFG

②arraycopy的方法是publicstaticvoid

arraycopy(Objectsrc,intsrcPos,Objectdest,

intdestPos,intlength)o其中五个参数分别表示:

src-被复制的数组

srcPos-从第几个元素开始复制

dest-要复制到的数组

destPos-从第几个元素开始粘贴

length-一共需要复制的元素个数

第6章时间、日期和数字

1.用Data类不带参数的构造方法创建日期,要求日期

的输出格式是:星期小时分秒。

答:importjava.util.*;

importjava.text.*;

classTest

(

publicstaticvoidmain(Stringargs[])

(

Date时间二newDate();

SimpleDateFormats=newSimpleDateFormat(/ZEHH

时mm分ss秒〃);

System,out.printin(s.format(时间));

2.输出2006年2月的日历页,程序需处理闰年问题。

答:importjava.util.*;

classTest

(

publicstaticvoidmain(Stringargs[])

(

intyear=2006,month=2;

intallDay;

if((year%4-0&&year%100!=0)||(year%400==0))

allDay=29;

else

allDay=28;

Calendarfeb=Calendar,getlnstance();

feb.set(2006,1,1);

intdat=feb.get(Calendar.DAY_OF_WEEK)-1;

Stringa[]=newString[dat+allDay];

for(inti=0;i<dat;i++)

a[i]二〃〃;

for(inti=dat,n=l;i<(dat+allDay);i++)

(

if(n<=9)

a[i]=String.valueOf(n)+z,〃;

else

a[i]=String.valueOf(n)+〃〃;

n++;

)

System,out.println(,z〃+year+〃年〃+month+〃月

〃);

System.out.printin(,/H一二三四五六〃);

for(intj=0;j<a.length;j++)

(

if(j%7==0)

(

System,out.printing〃);

System.out.print(a[j]);

3.计算某年、某月、某日和某年、某月、某日之间的

天数间隔。要求年、月、日通过main方法的参数传递

到程序中。

答:importjava.util.*;

classTest

(

publicstaticvoidmain(Stringargs[])

(

Calendarc=Calendar.getlnstance();

c.set(2000,0,1);

longtimel=c.getTimelnMillis();

c.set(2008,7,8);

longtime2=c.getTimelnMillis();

longdayCous=(time2-time1)/(1000*60*60*24);

System,out.printIn(〃2008年8月8日和2000年1月1日

相隔〃+dayCous+〃天〃);

}

}

4.编程练习Math类的常用方法。

答:importjava.text.*;

publicclassTest

publicstaticvoidmain(Stringargs[])

(

doublea二Math,abs(-10);

System,out.printin(〃T0的绝对值是:〃+a);

doublemaxNum=Math.max(123.456,-5.4321);

System,out.printin(z,123.456与-5.4321中的最大值

是:〃+maxNuni);

doubleminNum=Math.min(123.456,-5.4321);

System,out.printin(z,123.456与-5.4321中的最小值

是:〃+minNuni);

intrandomNum=(int)(Math,random()*10)+1;

System.out.printin(〃输出一个1到10的随机数

是:/,+randomNum);

doublepowNum=Math.pow(2,10);

System,out.printin(〃2的10次幕是:〃+powNum);

doublesqrtNum=Math.sqrt(10);

System,out.printin(〃10的平方根是:〃+sqrtNwn);

doublelogNum=Math.log(2);

System,out.printIn(〃2的对数是:〃+logNum);

doublesinNum=Math.sin(-10);

System,out.printin(〃-10的正弦值是:〃+sinNum);

doubleasinNum=Math.asin(0.5);

System,out.printin(z,0.5的反正弦值

是:〃+asinNum);

System.out.printIn(〃格式化之前的数

是:〃+sqrtNum);

NumberFormatf=NumberFormat.getlnstance();

f.setMaximumFractionDigits(10);

f.setMinimumlntegerDigits(4);

Strings二f.format(sqrtNum);

System,out.printin(〃格式化后:〃+s);

)

}

5.使用Biginteger类计算1!+3!+5!+7!+…的前30

项的和。

答:importjava.math.*;

publicclassTest

(

publicstaticvoidmain(Stringargs[])

Bigintegersum=newBiginteger(〃0〃),

jieCheng=newBiginteger(〃1〃),

ONE=newBiginteger(〃1〃),

i二ONE;

intk=0;

while(++k<=30)

(

sum=sum.add(jieCheng);

i=i.add(ONE);

jieCheng=jieCheng.multiply(i);

i=i.add(ONE);

jieCheng=jieCheng.multiply(i);

}

System,out.printin(sum);

}

)

第7章AWT组件及事件处理

1.Frame类对象的默认布局是什么布局?和Panel类

对象的默认布局相同吗?

答:①Frame类对象的默认布局是BorderLayout布局;

②不相同,Panel类对象的默认布局是FlowLayout布

局。

2.一个容器对象是否可以使用add方法添加一个

Frame窗口?

答:不可以。

3.Checkbox对象可以触发ItemEvent事件吗?

答:可以。

4.编写应用程序,有一个标题为“计算的窗口”的窗

口,窗口的布局为FlowLayout布局。窗口中添加两个

文本区,当我们在一个文本区中输入若干个数时,另

一个文本区,同时对输入的数进行求和运算并求出平

均值,也就是说随着输入的变化,另一个文本区不断

地更新求和及平均值。

答:importjava.awt.

importjava.awt.event.*;

importjava.util.*;

classCalculatedextendsFrameimplements

TextListener

(

TextAreatextl,text2;〃定义了2个文本区

Calculated(Strings)〃标题为“计算的窗口”的窗

{

super(s);

setLayout(newFlowLayout());〃窗口布局为

FlowLayout

textl=newTextArea(5,23);

text2=newTextArea(5,23);

add(textl);

add(text2);

text2.setEditable(false);〃显示求和结果和平均

值的文本区禁止编辑

textl.addTextListener(this);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

(

System,exit(0);

}

}

);

setBounds(100,100,400,160);

setVisible(true);

validate();

publicvoidtextValueChanged(TextEvente)

Strings=textl.getText();

StringTokenizergeshu=newStringTokenizer(s);

intn=geshu.countTokens();

doublea口二newdouble[n];

for(inti=0;i<n;i++)

{

Stringtemp=geshu.nextTokenO;

doubledate=Double.parseDouble(temp);

a[i]=date;

)

doublesum=0,average;

for(inti=0;i〈n;i++)

{

sum=sum+a[i];

}

average=sum/n;

text2.setText(null);

text2.append(〃和:"+$11111+〃\11〃+〃平均

数:,z+average);

publicclassTest

publicstaticvoidmain(Stringargs[])

(

Calculatedcalc=newCalculated(〃计算的窗口〃);

5.文本区可以使用getSelectedText()方法获取该文

本区通过拖动鼠标选中的文件。编写应用程序,有一

个标题为“挑单词”的窗口,窗口的布局为

BorderLayout布局。窗口中添加两个文本去和一个按

钮组

件,要求文本区分别添加到窗口的东部区域和西部区

域;按钮添加到窗口的南部区域,当单击按钮时,程

序将东部区域的文本区中鼠标选中的内容尾加到西部

区域的文本区中。

答:importjava.awt.

importjava.awt.event.*;

classWindowSelectedTextextendsFrame

implementsActionListener

TextAreatextl,text2;〃定义2个文本区

Buttonbutton;〃定义一个按钮

WindowSelectedText(Strings)//窗口名字为"挑单

词”

(

super(s);

setLayout(newBorderLayout());〃窗口布局是

BorderLayout布局

textl=newTextArea(6,15);

text2=newTextArea(6,15);

button=newButton(〃确定〃);

add(textl,BorderLayout.EAST);

add(text2,BorderLayout.WEST);

add(button,BorderLayout.SOUTH);

button.addActionListener(this);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

System,exit(0);

);

text2.setEditable(false);

setBounds(100,100,350,200);

setVisible(true);

validate();

}

publicvoidactionPerformed(ActionEvente)

(

if(e.getSource()-button)

(

Strings=textl.getSelectedText()+〃\n〃;

Stringstr=text2.getText();

text2.setText(str+s);

publicclassTest

(

publicstaticvoidmain(Stringargs[])

newWindowSelectedText(〃挑单词〃);

6.编写一个应用程序,有一个标题为“计算”的窗口,

窗口的布局为FlowLayout布局。设计4个按钮,分别命

名为“力口”、“差”、“积”、“除“,另外,窗口

中还有3个文本框。单击相应的按钮,将两个文本框的

数字做运算,在第三个文本框中显示结果。要求处理

NumberFormatExceptiono

答:importjava.awt.

importjava.awt.event.*;

classCalculatedextendsFrameimplements

ActionListener

(

TextFieldtextl,text2,text3;〃3个文本框

Buttonbuttonll,buttonC,buttonj,buttonS;〃4个按钮

Calculated(Strings)

(

super(s);

setLayout(newF1owLayout());〃FlowLayout布局

textl=newTextField(10);

text2=newTextField(10);

text3=newTextField(17);

buttonH=newButton(“加”);

buttonC=newButton(“差”);

buttonj二newButton("积”);

buttons二newButton("除“);

add(text1);

add(text2);

add(text3);

text3.setEditable(false);

add(buttonH);

add(buttonC);

add(buttonj);

add(buttons);

buttonll.addActionListener(this);

buttonC.addActionListener(this);

buttonJ.addActionListener(this);

buttons.addActionListener(this);

addWindowListener(newWindowAdapter()

(

publicvoidwindowC1osing(WindowEvente)

(

System,exit(0);

}

)

);

setBounds(100,100,160,180);

setVisible(true);

validateO;

)

publicvoidactionPerformed(ActionEvente)

(

doublenum1=0,num2=0,totle=0;

try

(

numl=Double.parseDouble(text1.getText());

num2=Double.pai'seDouble(text2.getText());

if(e.getSource()==buttonH)

(

totle=numl+num2;

text3.setText("和"+totle);

)

elseif(e.getSource()-buttonC)

(

tot1e=numl-num2;

text3.setText(〃差"+totle);

}

elseif(e.getSource()==buttonj)

totle=numl*num2;

text3.setText("积"+totle);

}

elseif(e.getSource()-buttonS)

totle=numl/num2;

text3.setText("商"+totle);

)

}

catch(NumberFormatExceptionevent)

(

text3.setText("请输入数字字符!〃);

}

)

}

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Calculatedcalc二newCalculated("计算〃);//标题为“计算”的窗口

)

}

7.改进例子7.16,在程序中增加一个名称为“确定”的按钮和一个文本区。当单击按钮时,程序验证用户

是否输入了合法的E-mail地址格式,如果合法就将用户输入的姓名、E-mail和职业尾加到文本区中,否则

在输入E-mai1的文本框中提示用户输入了非法格式的E-mai1地址。

答:importjavax.swing.*;

importjavax.swing,border.

importjava.awt.*;

importjava.awt.event.

classWindowBoxextendsFrameimplementsActionListener

(

TextFieldtextl,text2,text3;

TextAreatextarea;

BoxbaseBox,boxVl,boxV2;

Buttonbutton;

WindowBox()

(

button=newButton("确定");

textarea=newTextArea(6,12);

textl=newTextField(12);

text2=newTextField(12);

text3=newTextField(12);

boxVl=Box.createVerticalBox();

boxVl.add(newLabel("姓名"));

boxVl.add(Box.createVerticalStrut(8));

boxVl.add(newLabel("email"));

boxVl.add(Box.createVerticalStrut(8));

boxVl.add(newLabel(“职业”));

boxV2=Box.createVerticalBoxO;

boxV2.add(textl);

boxV2.add(Box.createVerticalStrut(8));

boxV2.add(text2);

boxV2.add(Box.createVerticalStrut(8));

boxV2.add(text3);

baseBox=Box.createllorizontalBox();

baseBox.add(boxVl);

baseBox.add(Box.createllorizontalStrut(10));

baseBox.add(boxV2);

setLayout(newFrlowLayout());

add(baseBox);

add(button);

add(textarea);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

{

System,exit(0);

)

}

);

textarea.setEditable(false);

button.addActionListener(this);

setBounds(100,10(),210,250);

setVisible(true);

validate();

}

publicvoidactionPerformed(ActionEvente)

(

booleana;

intb;

Strings;

if(e.getSource()==button)

(

s=text2.getText();

a=s.endsWithC.com");

b=s.indexOf(〃@〃);

if(a&&b>0)

(

Stringstr1=text1.getText()+“\n'+text2.getText()+,,\n,,+text3.getText()+“\n”;

Stringstr2=textarea.getText();

textarea.setText(str2+strl);

else

{

text2.setText(“输入了非法格式的E-mail地址〃);

)

)

}

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

newWindowBoxO;

}

}

8.写一个应用程序,要求编写一个Panel的子类MyPanel,MyPancl中有一个文本框和一个按钮,要求MyPanel

的实例作为其按钮的AclionEvenl事件的监视器,当单击按钮时,程序获取文本框中的文本,

并将该文本作为按钮的名称。然后在编写一个Frame的子类,即窗口。窗口的布局为BorderLayoul布局。窗

口中添加两个MyPanel面板,分别添加到窗口的东部区域和西部区域。

答:importjava.awt.*;

importjava.awt.event.*;

classMyPanelextendsPanelimplementsActionListener

(

Stringname;

TextFieldtext;

Buttonbutton;

MyPanel()

(

text=newTextField(lO);

button=newButton(“确定");

add(text);

add(button);

button.addActionlastener(this);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

System,exit(0);

);

publicvoidactionPerformed(ActionEvente)

(

if(e.getSource0-button)

(

name=text.getText();

button.setLabel(name);

)

}

)

classMyFrameextendsFrame

(

MyPanelpanel1,panel2;

MyFrame0

(

panell=newMyPanel0;

panel2=newMyPanel();

add(panel1,BorderLayout.EAST);

add(pane12,BorderLayout.WEST);

setBoundsdOO,100,400,100);

setVisible(true);

validate();

)

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

MyFramewin=newMyFrame0;

)

)

9.参照例子7.18编写一个应用程序,要求有一个画布,在画布上绘制一个矩形,用户通过文本框输入矩形

的宽和高以及矩形左上角的位置坐标。

答:importjava.awt.*;

importjava.awt.event.*;

classMycanvasextendsCanvas

(

intx,y,w,h;

Mycanvas()

setBackground(Color,cyan);

)

publicvoidsetX(intx)

(

this.x=x;

)

publicvoidsetY(inty)

(

this.y=y;

)

publicvoidsetW(intw)

(

this.w=w;

}

publicvoidsetli(inth)

(

this.h=h;

)

publicvoidpaint(Graphicsg)

(

g.drawRect(x,y,w,h);

)

)

classWindowCanvasextendsFrameimplementsActionListener

Mycanvascanvas;

TextFieldtextl,text2,text3,text4;

Buttonbutton;

WindowCanvas()

(

canvas=newMycanvas();

textl=newTextField(4);

text2=newTextField(4);

text3=newTextField(5);

text4=newTextField(5);

PanelpNorth=newPanel(),pSouth-newPanel();

button=newButton(“确定");

button.addActionUstener(this);

pNorth.add(newLabel("矩形的宽:”));

pNorth.add(text3);

pNorth.add(newLabel("矩形的高:”));

pNorth.add(text4);

pSouth.add(newLabel("左上角位置坐标:”));

pSouth.add(textl);

pSouth.add(text2);

pSouth.add(button);

addWindowListener(newWindowAdapter()

{

publicvoidwindowClosing(WindowEvente)

{

System,exit(0);

)

)

);

add(canvas,BorderLayout.CENTER);

add(pNorth,BorderLayout.NORTH);

add(pSouth,BorderLayout.SOUTH);

setBounds(100,100,500,500);

setVisible(true);

validate();

}

publicvoidactionPerformed(ActionEvente)

{

intx,y,w,h;

try

{

x=Integer.parselnt(textl.getText());

y=Integer.parselnt(text2.getText0);

w二Integer,parselnt(text3.getText());

h=Integer.parselnt(text4.getText());

canvas.setX(x);

canvas.setY(y);

canvas.setW(w);

canvas.setH(h);

canvas,repaint();

)

catch(NumberFormatExceptionee)

{

x=0;y=0;w=0;h=0;

)

publicclassTest

publicstaticvoidmain(Stringargs[])

{

newWindowCanvas0;

)

)

10.编写应用程序,有一个窗口对象,该窗口取它的默认布局:BorderLayoul布局,北面添加一个Lisi组件,

该组件有四个商品名称的选项。中心添加一个文本区,当选择List组件中的某个选项后,文本区显示对该

商品的价格和产地:当双击Lisi组件中的某个选项后,文本区显示该商品的详细广告。

答:importjava.awt.*:

importjava.awt.event.*;

classWindowGoodsextendsFrameimplementsActionListener,ItemListener

(

Strings[]={"产地:北京一产地:上海","产地:沈阳〃,〃产地:广东“};

Stringp□二{”价格:3200〃,”价格:158〃,〃价格:13.2","价格:320/打”};

Stringa[]={"本商品****","木商品*****","本商品******”,"木商品*******");

Listlist;

TextAreatext;

WindowGoods()

(

list=newList(3,false);

text=newTextArea(6,20);

text.setEdilable(false);

list,add(“商品1”);

list,add(〃商品2〃);

list.add(“商品3");

list.add("商品4”);

add(list,BorderLayout.NORTH);

add(text,BorderLayout.CENTER);

list.addltemListener(this);

1ist.addActionListener(this);

addWindowListener(newWindowAdapter()

{

publicvoidwindowClosing(WindowEvente)

(

System,exit(0);

)

)

);

setBounds(100,100,300,300);

setVisible(true);

validateO;

)

publicvoiditemStateChanged(ItemEvente)

(

if(e.getItemSelectable()=list.)

(

intm=list.getSelectedlndex();

text.setText(p[m]+'\n'+s[m]);

)

}

publicvoidactionPerformed(ActionEvente)

(

intn=list.get

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论