admin 管理员组文章数量: 887021
2023年12月18日发(作者:lenovo联想售后客户服务中心)
Java2
实用教程(第三版)
课后习题参考答案
第1 章Java 入门
1. 开发与运行Jav a 程序需要经过哪些主要步骤和过程?
答:( 1)编写Java 源文件:使用文本编辑器(Edit 或记事本),拓展名为.java
(2)编译Java 源文件:使用Java 编译器()。得到字节码文件*.class
(3)运行Java 程序:Java 应用程序使用Java 解释器()执行字节码文件;
Java 小应用程序使用支持Java 标准的浏览器来执行。
2. 怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public 修饰吗?
答: ①应用程序必须有main 方法,这个方法是程序执行的入口。
小应用程序没有main 方法。
②应用程序的主类不一定用public 修饰;小应用程序的主类必须用public 修饰。
3. Jav a 程序是由什么组成的?一个程序中必须要有public 类吗?Jav a 源文件的命名规则是怎样的?
答: ①Java 程序由类组成。
②应用程序可以没有public 类;小应用程序一定有一个类是public 类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java;
有多个类时,如果有public 类(最多一个),源文件名与public 类的类
名相同,拓展名是.java;没有public 类,源文件名与任何一个类的类名
相同即可,拓展名为.java。
小应用程序:源文件名与主类的类名相同,拓展名是.java。
4. 在运行小程序的HTM L 文件中可以使用codebas e 属性指定小程序的字节码所驻留的目录。如果不使用
codebas e 属性,小程序的字节码文件必须和运行它的HTM L 文件在同一目录中。编写一个小程序并将小程
序的字节码存放在某个目录中,比如C:5000;把运行该小程序的HTM L 文件(注意其中的codebas e 属性):
存放在另一个目录中。
答: 以书中小应用程序为例进行说明:
①编写Java 小应用程序源代码
import .*;
import .*;
public class Boy extends Applet
{
word版本 .
public void paint(Graphics g)
{
or();
ring("我一边喝着咖啡,一边学Java 呢",5,30);
or();
ring("我学得很认真",10,50);
}
}
②将上述代码命名为 并进行编译得到 字节码文件;将得到的字节码文件存放在
.3che. 三车资料库——学习资源共享专家
C:5000 文件夹下;
③编写小应用程序的HTML 源文件:
④将上述编写好的代码命名为;并将此文件存放在C:5000 文件夹以外的任意一个文件夹
中(如C:1000);
⑤运行。
第2 章标识符、关键字和数据类型
1. 什么叫标识符?标识符的规则是什么?
答:①用来标识类名、变量名、、方法名、类型名、数组名、文件名的有效字符序列。
②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标
识符。
2. 什么叫关键字?请说出5 个关键字。
答:①Java 语言中已经被赋予特定意义的一些单词。
②class break public return static extends 等。
3. Jav a 的基本数据类型都是什么?
答:boolean(逻辑型) char(字符型) float、double(浮点型) byte、short、int、long(整型)。
4. 下列哪些语句是错误的:
int x = 8;
byte b = 127;
b = x;
答:b=x 语句错误;原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x; 。
5. 下列程序的输出结果是什么?
public class E
{
public static void main(Strin g args[])
{
long[] a={1,2,3,4 };
word版本 .
long[] b={100,200 ,300,400,500};
b=a;
n("数组b 的长度:"+ );
n("b[0]="+b[0]) ;
}
}
答: 数组b 的长度:4
b[0]=1
6. 上机运行下列程序,注意观察输出结果。
public class E
{
public static void main(Strin g args[])
{
for(int i=20302;i< 20322;i++)
{
n((char)i);
.3che. 三车资料库——学习资源共享专家
}
}
}
答: 低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟你佡
7. .p rintln(“你好”);可输出字符串,也可以使用. println( )输出变量或表达
式的值,只需使用并置符号“+” 将变量、表达式或一个常数值与一个字符串并置即可, 如:
n(“ ”+x);. println(“:”+123+“大于”+122);等。上机调试下列
程序,注意观察结果,特别注意. print( )和.p rintln( )的区别。
public class OutputData
{
public static void main(Strin g args[])
{
int x=234,y=432 ;
n(x+"<"+(2*x));
("我输出结果后不回车");
n("我输出结果后自动回车到下一行");
n("x+y= "+(x+y));
n(" "+x+y+"=234 432");
}
}
word版本 .
答: 234<468
我输出结果后不回车我输出结果后自动回车到下一行
x+y= 666
234432=234432
8. 编写一个Jav a 应用程序,输出全部的希腊字母。
答:
public class XLWords
{
public static void main(String args[])
{
for(int i=913;i<930;i++)
{
((char)i+" ");
}
for(int j=931;j<938;j++)
{
((char)j+" ");
}
for(int k=945;k<962;k++)
{
((char)k+" ");
}
for(int t=963;t<=969;t++)
{
.3che. 三车资料库——学习资源共享专家
((char)t+" ");
}
}
}
第3 章运算符、表达式和语句
1. 下列程序的输出结果是什么?
public class E
{
public static void main(Strin g args[])
{
char x='你',y='e', z= ' 吃';
if(x>'A')
word版本 .
{
y='爱';
z= '情';
}
else
y='我';
z= '她';
n(" "+x+y+ z) ;
}
}
答: 你爱她
2. 下列程序的输出结果是什么?
public class E3
{
public static void main(Strin g args[])
{
char c='0';
for(int i=1;i<=4;i+ +)
{
switch(i)
{
case 1:c='b';
(c);
case 2:c='e';
(c);
break;
case 3:c='p';
(c);
default:
("!");
}
}
}
}
答:beep!!
3. 编写应用程序,求1!+2!+…+10!。
答:
class Fact
word版本 .
{
public static void main(String args[])
{
int fact,sum=0;
for(int i=1;i<=10;i++)
{
fact=1;
for(int j=1;j<=i;j++)
fact*=j;
sum+=fact;
}
n("1 到10 的阶乘之和是:"+sum);
}
}
4. 编写一个应用程序,求10 0 以的全部素数。
答:
class Primes
{
public static void main(String args[])
{
int w=1;
for(int i=2;i<=100;i++)
{
for(int j=2;j
{
w=i%j;
if(w==0)
break;
}
if(w!=0)
n(i+"是素数");
}
}
}
5. 分别用do―whil e 和fo r 循环计算1+1/2!+1/3!+1/4!+…的前2 0 项和。
答: ①for 循环
class Sum
}
word版本 .
}
}
答:beep!!
3. 编写应用程序,求1!+2!+…+10!。
答:
class Fact
{
public static void main(String args[])
{
int fact,sum=0;
for(int i=1;i<=10;i++)
{
fact=1;
for(int j=1;j<=i;j++)
fact*=j;
sum+=fact;
}
n("1 到10 的阶乘之和是:"+sum);
}
}
4. 编写一个应用程序,求10 0 以的全部素数。
答:
class Primes
{
public static void main(String args[])
{
int w=1;
for(int i=2;i<=100;i++)
{
for(int j=2;j
{
w=i%j;
if(w==0)
break;
}
if(w!=0)
n(i+"是素数");
}
word版本 .
}
}
5. 分别用do―whil e 和fo r 循环计算1+1/2!+1/3!+1/4!+…的前2 0 项和。
答: ①for 循环
class Sum
sum=0;
for(i=1;i { if(x%i==0) sum+=i; } if(x==sum) n(x+"是完数"); } } } 7. 编写应用程序,分别使用whil e 和fo r 循环计算8+88+888+…前1 0 项之和。 答: ①for 循环 class TheSum { public static void main(String args[]) { long sum=0,data=8; for(int i=1;i<=10;i++) { sum=sum+data; data=data*10+8; } n(sum); } } ②while 循环 class TheSum { public static void main(String args[]) { long sum=0,data=8,i=0; while(++i<=10) word版本 . { sum=sum+data; data=data*10+8; } n(sum); } } 8. 编写应用程序,输出满足1+2+3+…+n<888 8 的最大正整数n。 答: class Maxn { public static void main(String args[]) { int k=1,sum=0; while((sum+=k)<8888) k++; k--; n("最大能取到:"+k); } } 第4 章类、对象和接口 1. 类中的实例变量在什么时候会被分配存空间? 答: 当该类创建对象之后,实例变量才会被分配相应的存空间。 2. 什么叫方法的重载?构造方法可以重载吗? 答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同, 或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。 ②构造方法可以重载。 3. 类中的实例方法可以操作类变量(stati c 变量)吗?类方法(stati c 方法)可以操作实例变量吗? 答:①类中的实例方法可以操作类变量。 ②类方法不可以操作实例变量 4. 类中的实例方法可以用类名直接调用吗? 答: 类中的实例方法不可以用类名直接调用。 5. 举例说明protecte d 方法和友好方法的区别。 答: 当子类与父类不在同一个包中时,子类可以继承父类的protected 方法;而友好方法此时则不能被子 类继承。 6. 举例说明类变量和实例变量的区别。 答:⑴书写: 定义成员变量时,类变量有static 修饰;实例变量没有static 修饰。 word版本 . 例: class A { int x; //实例变量 static int y; //类变量 } ⑵存: 不创建对象,类的实例变量不会被分配存空间;类变量被分配相应的存空间。 不同对象的实例变量被分配不同的存空间;不同对象的类变量被分配相同的存空间。 任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。 一个对象的实例变量发生改变,不影响其他对象的相应实例变量。 例: 执行语句: A1.x=10; A1.y=20; 这时A2.x 的值也是10;而A2.y 的值保持原来的初值。 ⑶使用: 类变量可以被类方法操作;而实例变量不能被类方法操作。 例: class A { int x; static int y; static void func() { b=10; //合法 a=20; //非法 } } 类变量可以通过类名访问;实例变量不能通过类名访问。 例: class A { int x; static int y; } class B { public void func(); { A.x=10; //非法 A.y=20; //合法 } } 7. 子类将继承父类的哪些成员变量和方法?子类在什么情况下隐藏父类的成员变量和方法?在子类中是 否允许有一个方法和父类的方法名字相同,而类型不同? word版本 . 答:①子类和父类在同一个包中时,子类可以继承父类的除private 属性的所有方法和成员变量,当子类与 父类不在同一个包中时,子类只能继承父类的protected 和public 属性的成员变量和方法。 ②子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类中定义一个 方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同,子类就隐藏 从父类继承来的方法(方法的重写)。 ③在子类中允许有一个方法和父类的方法名字相同而类型不同。 8. 父类的fina l 方法可以被子类重写吗? 答: 父类的final 方法不能被子类重写。 9. 什么类中可以有abstrac t 方法? 答: abstract 类中可以有abstract 方法。 10.什么叫对象的上转型对象? 答: B 类是A 类的子类或间接子类,当用子类B 创建一个对象b 并把这个对象的引用放到A 类的对象a 中时, 称A 类对象a 是子类对象b 的上转型对象。 11.什么叫接口的回调? 答: 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。 12.下列程序有什么错误? public class Takecare { int a=90; static float b=10.98f; public static void main(Strin g args[]) { float c=a+b; n("c="+c); } } 答: 语句float c=a+b;错误。原因是类方法main 操作了实例变量a。 13. 请写出下列程序的输出结果。 class A { public int f(int x) { return x+1; } } class B extends A word版本 . { public int f(int x) { return x*x; } } public class E { public static void main(Strin g args[]) { A a=new B(); int m=a.f(10); n(m); } } 答: 100 14. 请写出下列程序的输出结果。 class A { int x; public void setX(int x) { this.x=x; } int getX() { return x; } } class B { public void f(A a) { (100 ); } } public class E { word版本 . public static void main(Strin g args[]) { A a=new A(); (8); n(()); B b=new B(); b.f(a); n(()); } } 答: 8 100 15.使用接口有哪些注意事项?模仿例子4.27,编写一个类实现两个接口的程序。 答:①一个类使用接口时,要有implements 关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开; 使用接口的类除abstract 类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回 类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public 修饰,如 果接口方法的返回类型不是void 型,在类中实现接口时,方法体至少有一个return 语句。 ② interface 表面积 { double allArea(double r); } interface 体积 { double volu(double r); } class Sph implements 表面积,体积 { double PI=3.14159; public double allArea(double r) { return 4*PI*r*r; } public double volu(double r) { return 4.0/3*PI*r*r*r; } } word版本 . public class Test { public static void main(String args[]) { double r=5.0; Sph a=new Sph(); n("半径为5 的球的表面积是:"+a(r)); n("半径为5 的球的体积是:"+(r)); } } 16.编写一个类A,该类创建的对象可以调用方法f 输出英文字母表,然后再编写一个该类的子类B,要求 子类B 必须继承A 类的方法f(不允许重写),子类创建的对象不仅可以调用方法f 输出英文字母表,而 且调用子类新增的方法g 输出希腊字母表。 答: class A { int m; void f() { for(m=65;m<91;m++) ((char)m+" "); for(m=97;m<123;m++) ((char)m+" "); n(" "); } } class B extends A { int i; void g() { for(i=913;i<930;i++) ((char)i+" "); for(i=931;i<938;i++) ((char)i+" "); for(i=945;i<962;i++) ((char)i+" "); for(i=963;i<970;i++) ((char)i+" "); word版本 . n(" "); } } public class Test { public static void main(String args[]) { B b=new B(); n("我调用方法f 输出英文字母表:"); b.f(); n("我调用方法g 输出希腊字母表:"); b.g(); } } 17.编写一个异常类MyException,再编写一个类Studen t,该类有一个产生异常的方法public void speak(int m) throws MyException,要求参数m 的值大于100 0 时,方法抛出一个MyExceptio n 对象。 最后编写主类,在主类的mai n 方法中用Studen t 创建一个对象,让该对象调用spea k 方法。 答: class MyException extends Exception { String str1; MyException(int m) { str1=m+"出现错误可能造成的原因是取值大于1000"; } public void showStr1() { n(str1); } } class Student { public void speak(int m) throws MyException { if(m>1000) { MyException exception=new MyException(m); throw exception; } word版本 . else n(m); } } public class Test { public static void main(String agrs[]) { int m; Student stu1=new Student(); m=987; try { (m); m=1234; (m); } catch(MyException e) { r1(); } } } 18.编写一个类,该类有一个方法public int f(int a,int b),该方法返回a 和b 的最大公约数。然后再 编写一个该类的子类,要求子类重写方法f,而且重写的方法将返回a 和b 的最小公倍数。要求在重写 的方法的方法体中首先调用被隐藏的方法返回a 和b 的最大公约数m,然后将乘积(a*b)/ m 返回。要求 在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f 计算两个正整数的最大公约数 和最小公倍数。 答: class A { public int f(int a,int b) { if(a { int temp=0; temp=a; a=b; b=temp; word版本 . } int r=a%b; while(r!=0) { a=b; b=r; r=a%b; } return b; } } class B extends A { public int f(int a,int b) { int m; m=super.f(a,b); return (a*b)/m; } } public class Test { public static void main(String args[]) { A a=new A(); n("18 和102 的最大公约数是:"+a.f(18,102)); B b=new B(); n("18 和102 的最小公倍数是:"+b.f(18,102)); } } 第5 章字符串 1. 使用Strin g 类的public String toUpperCase ()方法可以将一个字符串中的小写字母变成大写字母, 使用public String toLowerCase ()方法可以将一个字符串中的大写字母变成小写字母。编写一个程 序,使用这两个方法实现大小写的转换。 答: class Test { public static void main(String args[]) word版本 . { String str="I can use Java"; n("要转换的字符串是:"+str); String s=rCase(); n("转换成大写字符串是:"+s); s=rCase(); n("转换成小写字符串是:"+s); } } 2. 使用Strin g类的public String concat(Stri ng str)方法可以把调用该方法的字符串与参数指定的字 符串连接,把st r 指定的串连接到当前串的尾部获得一个新的串。编写一个程序通过连接两个串得到 一个新串,并输出这个新串。 答: class Test { public static void main(String args[]) { String str1="I can u"; String str2="se Java"; String s=(str2); n("将字符串"+str1+"与字符串"+str2+"连接后得到的新字符串是:"); n(s); } } 3. Strin g 类的public char charAt(int index)方法可以得到当前字符串inde x 位置上的一个字符。说 出下列程序的输出结果。 public class E3 { public static void main(Strin g args[]) { String s="中国科学技术大学"; char a=( 2),b=(6); (a); n(b); } } 答: 科大 word版本 . 4. 使用 l 包中的Array s 类的静态方法public static void sort(double a[])可以把参数a 指 定的doubl e 型数组按升序排序,使用 l 包中的Array s 类的静态方法public static void sort(doubl e a[],int start,int end)可以把参数a 指定的doubl e 型数组中从位置star t 到end- 1 位 置的数按升序排序。写出下列程序的输出结果。 import . *; public class E4 { public static void main(Strin g args[]) { int a[]={23,67, 89,90,-987}; double b[]={12.89 ,90.87,34,678.987,-98. 78,0.89}; t(a); t(b,1,4); for(int i=0;i<=4;i+ +) { (a[i]+","); } for(int i=0;i< gth;i++) { (b[i]+","); } } } 答: -987,23,67,89,90,12.89,34.0,90.87,678.987,-98.78,0.89, 5. 使用 g 包中Syste m 类的静态方法arraycop y 可以实现数组的快速复制,上机实习下列程序, 并总结出arraycop y 方法参数的使用规则。 public class ArrayCopy { public static void main(Strin g args[]) { char a1[]={'a',' b','c','d','e','f'},b 1[]={'1','2','3','4',' 5','6'}; aycopy(a1,0,b1,1, ngth-1); n(new String(a1)) ; n(new String(b1)) ; byte a2[]={97,98 ,99,100,101,102},b2[] ={65,67,68,69,70,71}; word版本 . aycopy(b2,0,a2,3, ngth-3); n(new String(a2)) ; n(new String(b2)) ; } } 答:①运行结果:abcdef 1abcde abcACD ACDEFG ②arraycopy 的方法是public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。其中五个参数分别表示: src - 被复制的数组 srcPos - 从第几个元素开始复制 dest - 要复制到的数组 destPos - 从第几个元素开始粘贴 length - 一共需要复制的元素个数 第6 章时间、日期和数字 1. 用Dat a 类不带参数的构造方法创建日期,要求日期的输出格式是:星期小时分秒。 答: import .*; import .*; class Test { public static void main(String args[]) { Date 时间=new Date(); SimpleDateFormat s=new SimpleDateFormat("E HH 时mm 分ss 秒"); n((时间)); } } 2. 输出200 6 年2 月的日历页,程序需处理闰年问题。 答: import .*; class Test { public static void main(String args[]) { int year=2006,month=2; int allDay; word版本 . if((year%4==0&&year%100!=0)||(year%400==0)) allDay=29; else allDay=28; Calendar feb=tance(); (2006,1,1); int dat=(_OF_WEEK)-1; String a[]=new String[dat+allDay]; for(int i=0;i { a[i]=" "; } for(int i=dat,n=1;i<(dat+allDay);i++) { if(n<=9) a[i]=f(n)+" "; else a[i]=f(n)+" "; n++; } n(" "+year+" 年"+month+"月"); n("日一二三四五六"); for(int j=0;j<;j++) { if(j%7==0) { n(" "); } (a[j]); } } } 3. 计算某年、某月、某日和某年、某月、某日之间的天数间隔。要求年、月、日通过mai n 方法的参数传 递到程序中。 答: import .*; class Test { word版本 . public static void main(String args[]) { Calendar c=tance(); (2000,0,1); long time1=eInMillis(); (2008,7,8); long time2=eInMillis(); long dayCous=(time2-time1)/(1000*60*60*24); n("2008 年8 月8 日和2000 年1 月1 日相隔"+dayCous+"天"); } } 4. 编程练习Mat h 类的常用方法。 答: import .*; public class Test { public static void main(String args[]) { double a=(-10); n("-10 的绝对值是:"+a); double maxNum=(123.456,-5.4321); n("123.456 与-5.4321 中的最大值是:"+maxNum); double minNum=(123.456,-5.4321); n("123.456 与-5.4321 中的最小值是:"+minNum); int randomNum=(int)(()*10)+1; n("输出一个1 到10 的随机数是:"+randomNum); double powNum=(2,10); n("2 的10 次幂是:"+powNum); double sqrtNum=(10); n("10 的平方根是:"+sqrtNum); double logNum=(2); n("2 的对数是:"+logNum); double sinNum=(-10); n("-10 的正弦值是:"+sinNum); double asinNum=(0.5); n("0.5 的反正弦值是:"+asinNum); n("格式化之前的数是:"+sqrtNum); NumberFormat f=tance(); imumFractionDigits(10); word版本 . imumIntegerDigits(4); String s=(sqrtNum); n("格式化后:"+s); } } 5. 使用BigIntege r 类计算1!+3!+5!+7!+…的前3 0 项的和。 答: import .*; public class Test { public static void main(String args[]) { BigInteger sum=new BigInteger("0"), jieCheng=new BigInteger("1"), ONE=new BigInteger("1"), i=ONE; int k=0; while(++k<=30) { sum=(jieCheng); i=(ONE); jieCheng=ly(i); i=(ONE); jieCheng=ly(i); } n(sum); } } 第7 章AWT 组件及事件处理 1. Fram e 类对象的默认布局是什么布局?和Pane l 类对象的默认布局相同吗? 答:①Frame 类对象的默认布局是BorderLayout 布局; ②不相同,Panel 类对象的默认布局是FlowLayout 布局。 2. 一个容器对象是否可以使用ad d 方法添加一个Fram e 窗口? 答: 不可以。 3. Checkbo x 对象可以触发ItemEven t 事件吗? 答: 可以。 4. 编写应用程序,有一个标题为“计算的窗口”的窗口,窗口的布局为FlowLayou t 布局。窗口中添加两 word版本 . 个文本区,当我们在一个文本区中输入若干个数时,另一个文本区,同时对输入的数进行求和运算并 求出平均值,也就是说随着输入的变化,另一个文本区不断地更新求和及平均值。 答: import .*; import .*; import .*; class Calculated extends Frame implements TextListener { TextArea text1,text2; //定义了2 个文本区 Calculated(String s) //标题为“计算的窗口”的窗口 { super(s); setLayout(new FlowLayout()); //窗口布局为FlowLayout text1=new TextArea(5,23); text2=new TextArea(5,23); add(text1); add(text2); table(false); //显示求和结果和平均值的文本区禁止编辑 tListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); setBounds(100,100,400,160); setVisible(true); validate(); } public void textValueChanged(TextEvent e) { String s=t(); StringTokenizer geshu=new StringTokenizer(s); int n=okens(); double a[]=new double[n]; for(int i=0;i { word版本 . String temp=ken(); double date=ouble(temp); a[i]=date; } double sum=0,average; for(int i=0;i { sum=sum+a[i]; } average=sum/n; t(null); ("和:"+sum+"n"+"平均数:"+average); } } public class Test { public static void main(String args[]) { Calculated calc=new Calculated("计算的窗口"); } } 5. 文本区可以使用getSelected Text()方法获取该文本区通过拖动鼠标选中的文件。编写应用程序,有一 个标题为“挑单词”的窗口,窗口的布局为BorderLayou t 布局。窗口中添加两个文本去和一个按钮组 件,要求文本区分别添加到窗口的东部区域和西部区域;按钮添加到窗口的南部区域,当单击按钮时, 程序将东部区域的文本区中鼠标选中的容尾加到西部区域的文本区中。 答: import .*; import .*; class WindowSelectedText extends Frame implements ActionListener { TextArea text1,text2; //定义2 个文本区 Button button; //定义一个按钮 WindowSelectedText(String s) //窗口名字为“挑单词” { super(s); setLayout(new BorderLayout()); //窗口布局是BorderLayout 布局 text1=new TextArea(6,15); text2=new TextArea(6,15); word版本 . button=new Button("确定"); add(text1,); add(text2,); add(button,); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); table(false); setBounds(100,100,350,200); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { if(rce()==button) { String s=ectedText()+"n"; String str=t(); t(str+s); } } } public class Test { public static void main(String args[]) { new WindowSelectedText("挑单词"); } } 6. 编写一个应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayou t 布局。设计4 个按钮, 分别命名为“加”、“差”、“积”、“除”,另外,窗口中还有3 个文本框。单击相应的按钮,将两个文本 word版本 . 框的数字做运算,在第三个文本框中显示结果。要求处理NumberForma tException。 答: import .*; import .*; class Calculated extends Frame implements ActionListener { TextField text1,text2,text3; //3 个文本框 Button buttonH,buttonC,buttonJ,buttonS; //4 个按钮 Calculated(String s) { super(s); setLayout(new FlowLayout()); //FlowLayout 布局 text1=new TextField(10); text2=new TextField(10); text3=new TextField(17); buttonH=new Button("加"); buttonC=new Button("差"); buttonJ=new Button("积"); buttonS=new Button("除"); add(text1); add(text2); add(text3); table(false); add(buttonH); add(buttonC); add(buttonJ); add(buttonS); ionListener(this); ionListener(this); ionListener(this); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); word版本 . setBounds(100,100,160,180); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { double num1=0,num2=0,totle=0; try { num1= ouble(t()); num2= ouble(t()); if(rce()==buttonH) { totle=num1+num2; t("和"+totle); } else if(rce()==buttonC) { totle=num1-num2; t("差"+totle); } else if(rce()==buttonJ) { totle=num1*num2; t("积"+totle); } else if(rce()==buttonS) { totle=num1/num2; t("商"+totle); } } catch(NumberFormatException event) { t("请输入数字字符!"); } } } word版本 . public class Test { public static void main(String args[]) { Calculated calc=new Calculated("计算"); //标题为“计算”的窗口 } } 7. 改进例子7.16,在程序中增加一个名称为“确定”的按钮和一个文本区。当单击按钮时,程序验证用 户是否输入了合法的E-mai l 地址格式,如果合法就将用户输入的、E-mai l 和职业尾加到文本区中, 否则在输入E-mai l 的文本框中提示用户输入了非法格式的E-mai l 地址。 答: import .*; import .*; import .*; import .*; class WindowBox extends Frame implements ActionListener { TextField text1,text2,text3; TextArea textarea; Box baseBox,boxV1,boxV2; Button button; WindowBox() { button=new Button("确定"); textarea=new TextArea(6,12); text1=new TextField(12); text2=new TextField(12); text3=new TextField(12); boxV1=VerticalBox(); (new Label("")); (VerticalStrut(8)); (new Label("email")); (VerticalStrut(8)); (new Label("职业")); boxV2=VerticalBox(); (text1); (VerticalStrut(8)); (text2); (VerticalStrut(8)); word版本 . (text3); baseBox=Horizonta lBox(); (boxV1); (Horizonta lStrut(10)); (boxV2); setLayout(new FlowLayout()); add(baseBox); add(button); add(textarea); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); table(false); ionListener(this); setBounds(100,100,210,250); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { boolean a; int b; String s; if(rce()==button) { s=t(); a=th("."); b=f(""); if(a&&b>0) { String str1=t()+"n"+t()+"n"+t()+"n"; String str2=t(); t(str2+str1); word版本 . } else { t("输入了非法格式的E-mail 地址"); } } } } public class Test { public static void main(String args[]) { new WindowBox(); } } 8. 写一个应用程序,要求编写一个Pane l 的子类MyPanel,MyPane l 中有一个文本框和一个按钮,要求 MyPane l 的实例作为其按钮的ActionEven t 事件的监视器,当单击按钮时,程序获取文本框中的文本, 并将该文本作为按钮的名称。然后在编写一个Fram e 的子类,即窗口。窗口的布局为BorderLayou t 布 局。窗口中添加两个MyPane l 面板,分别添加到窗口的东部区域和西部区域。 答: import .*; import .*; class MyPanel extends Panel implements ActionListener { String name; TextField text; Button button; MyPanel() { text=new TextField(10); button=new Button("确定"); add(text); add(button); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); word版本 . } } ); } public void actionPerformed(ActionEvent e) { if(rce()==button) { name=t(); el(name); } } } class MyFrame extends Frame { MyPanel panel1,panel2; MyFrame() { panel1=new MyPanel(); panel2=new MyPanel(); add(panel1,); add(panel2,); setBounds(100,100,400,100); setVisible(true); validate(); } } public class Test { public static void main(String args[]) { MyFrame win=new MyFrame(); } } 9. 参照例子7.1 8 编写一个应用程序,要求有一个画布,在画布上绘制一个矩形,用户通过文本框输入矩 形的宽和高以及矩形左上角的位置坐标。 答: import .*; word版本 . import .*; class Mycanvas extends Canvas { int x,y,w,h; Mycanvas() { setBackground(); } public void setX(int x) { this.x=x; } public void setY(int y) { this.y=y; } public void setW(int w) { this.w=w; } public void setH(int h) { this.h=h; } public void paint(Graphics g) { ct(x,y,w,h); } } class WindowCanvas extends Frame implements ActionListener { Mycanvas canvas; TextField text1,text2,text3,text4; Button button; WindowCanvas() { canvas=new Mycanvas(); text1=new TextField(4); word版本 . text2=new TextField(4); text3=new TextField(5); text4=new TextField(5); Panel pNorth=new Panel(),pSouth=new Panel(); button=new Button("确定"); ionListener(this); (new Label("矩形的宽: ")); (text3); (new Label("矩形的高: ")); (text4); (new Label("左上角位置坐标:")); (text1); (text2); (button); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); add(canvas,); add(pNorth,); add(pSouth,); setBounds(100,100,500,500); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { int x,y,w,h; try { x=nt(t()); y=nt(t()); w=nt(t()); h=nt(t()); word版本 . (x); (y); (w); (h); t(); } catch(NumberFormatException ee) { x=0;y=0;w=0;h=0; } } } public class Test { public static void main(String args[]) { new WindowCanvas(); } } 10.编写应用程序,有一个窗口对象,该窗口取它的默认布局: BorderLayou t 布局,北面添加一个Lis t 组 件,该组件有四个商品名称的选项。中心添加一个文本区,当选择Lis t 组件中的某个选项后,文本区 显示对该商品的价格和产地:当双击Lis t 组件中的某个选项后,文本区显示该商品的详细广告。 答: import .*; import .*; class WindowGoods extends Frame implements ActionListener,ItemListener { String s[]={"产地:","产地:","产地:","产地:"}; String p[]={"价格:3200","价格:158","价格:13.2","价格:320/打"}; String a[]={"本商品****","本商品*****","本商品******","本商品*******"}; List list; TextArea text; WindowGoods() { list=new List(3,false); text=new TextArea(6,20); table(false); ("商品1"); word版本 . ("商品2"); ("商品3"); ("商品4"); add(list,); add(text,); mListener(this); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); setBounds(100,100,300,300); setVisible(true); validate(); } public void itemStateChanged(ItemEvent e) { if(mSelectable()==list) { int m=ectedIndex(); t(p[m]+'n'+s[m]); } } public void actionPerformed(ActionEvent e) { int n=ectedIndex(); t(a[n]); } } public class Test { public static void main(String args[]) { new WindowGoods(); word版本 . } } 11.编写程序,观察各种组件设置背景色和前景色的情况。 答: import .*; import .*; class WindowColor extends Frame implements ActionListener { Button button; //按钮 TextField textfield; //文本框 TextArea textarea; //文本区 Mypanel panel; //面板 Checkbox box; //选择框 Choice choice; //下拉列表 List list; //滚动列表 Label label; //标签 Mycanvas can; //画布 Button buttonBackColor,buttonForeColor; WindowColor() { button=new Button("我是按钮"); textfield=new TextField("我是文本框",10); textarea=new TextArea(6,15); t("我是文本区"); table(false); table(false); panel=new Mypanel(); box=new Checkbox("我是选择框"); choice=new Choice(); ("我是下拉列表"); list=new List(3,false); ("我是滚动列表"); label=new Label("我是标签"); can=new Mycanvas(); buttonBackColor=new Button("背景色"); buttonForeColor=new Button("前景色"); setLayout(new FlowLayout()); add(button); add(textfield); word版本 . add(textarea); add(panel); add(box); add(choice); add(list); add(label); add(can); add(buttonBackColor); add(buttonForeColor); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); ionListener(this); ionListener(this); setBounds(100,100,300,300); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { if(rce()==buttonBackColor) { kground(); kground(); kground(); kground(); kground(); kground(); kground(); kground(); kground(); } else if(rce()==buttonForeColor) word版本 . { eground(); eground(); eground(); eground(); eground(); eground(); eground(); eground(); eground(); } } } class Mycanvas extends Canvas { Mycanvas(){ } public void paint(Graphics g) { ring("我是画布",5,5); } } class Mypanel extends Panel { Button button1; Mypanel() { button1=new Button("我是面板"); add(button1); } } public class Test { public static void main(String args[]) { new WindowColor(); } } 12.编写应用程序,有一个标题为“移动”的窗口,窗口的布局为null,在窗口中有两个按钮,单击一个 按钮让另一个按钮移动。 word版本 . 答: import .*; import .*; class WindowMove extends Frame implements ActionListener { Button button1,button2; WindowMove(String s) { super(s); setLayout(null); button1=new Button("我让它横向走动"); button2=new Button("我让它纵向走动"); kground(); kground(); ionListener(this); ionListener(this); sor(definedCursor(_CURSOR)); sor(definedCursor(_CURSOR)); add(button1); add(button2); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); nds(20,80,100,30); nds(100,180,100,30); setBounds(100,100,500,500); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { Rectangle rect1=nds(); int x1=(int)(); int y1=(int)(); word版本 . Rectangle rect2=nds(); int x2=(int)(); int y2=(int)(); if(rce()==button1) { x2=x2+5; ation(x2,y2); } else if(rce()==button2) { y1=y1+5; ation(x1,y1); } } } public class Test { public static void main(String args[]) { new WindowMove("移动"); } } 13.编写应用程序,有一个标题为“改变颜色”的窗口,窗口的布局为null,在窗口中有3 个按钮和一个 画布,3 个按钮的颜色分别是红、绿、蓝。单击相应的按钮,画布绘制相应颜色的圆。 答: import .*; import .*; class WindowChangeColor extends Frame implements ActionListener { Button buttonRed,buttonGreen,buttonBlue; Mycanvas canvas; WindowChangeColor(String s) { super(s); setLayout(null); buttonRed=new Button("红色"); buttonGreen=new Button("绿色"); buttonBlue=new Button("蓝色"); canvas=new Mycanvas(); word版本 . kground(); kground(); kground(); add(canvas); nds(10,10,150,150); add(buttonRed); nds(10,170,50,30); add(buttonGreen); nds(70,170,50,30); add(buttonBlue); nds(130,170,50,30); ionListener(this); ionListener(this); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); setBounds(100,100,200,250); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { if(rce()==buttonRed) { (1); t(); } else if(rce()==buttonGreen) { (2); t(); } word版本 . else if(rce()==buttonBlue) { (3); t(); } } } class Mycanvas extends Canvas { int x=0; Mycanvas() { setBackground(); } public void setX(int y) { x=y; } public void paint(Graphics g) { switch(x){ case 1: or(); break; case 2: or(); break; case 3: or(); break; default: or(); } al(65,65,50,50); } } public class Test { word版本 . public static void main(String args[]) { new WindowChangeColor("改变颜色"); } } 14.编写应用程序,测试Curso r 类中表示鼠标形状的静态常量。 答: import .*; import .*; class WindowCursor extends Frame implements ActionListener { Button button,button1; TextField text; int n=-1; WindowCursor() { button=new Button("单击我"); text=new TextField("将鼠标放在上面的按钮上看形状"); button1=new Button("看看你鼠标的形状"); add(button,); add(button1,); add(text,); kground(); kground(); ionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); setBounds(100,100,190,150); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { word版本 . n=(n+1)%10; switch(n) { case 0: sor(definedCursor(_CURSOR)); break; case 1: sor(definedCursor(AIR_CURSOR)); break; case 2: sor(definedCursor(_CURSOR)); break; case 3: sor(definedCursor(_CURSOR)); break; case 4: sor(definedCursor(Cursor.N_RESIZE_CURSOR)); break; case 5: sor(definedCursor(_RESIZE_CURSOR)); break; case 6: sor(definedCursor(_RESIZE_CURSOR)); break; case 7: sor(definedCursor(Cursor.W_RESIZE_CURSOR)); break; case 8: sor(definedCursor(_CURSOR)); break; case 9: sor(definedCursor(T_CURSOR)); break; } } } public class Test { word版本 . public static void main(String args[]) { new WindowCursor(); } } 15.改进本章例子7.30,当释放鼠标键时,如果当前组件和其他组件相交,就将其他组件设置为不可见状 态。 答: import .*; import .*; import tilities; class Win extends Frame implements MouseListener,MouseMotionListener { Button button; TextField text; int x,y; boolean move=false; Win() { button=new Button("用鼠标拖动我"); text=new TextField("用鼠标拖动我",8); kground(); kground(); seListener(this); seMotionListener(this); seListener(this); seMotionListener(this); addMouseMotionListener(this); setLayout(new FlowLayout()); add(button); add(text); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } } ); word版本 . setBounds(10,10,350,300); setVisible(true); validate(); } public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e) { move=false; Rectangle rect=nds(); int x=(int)(); int y=(int)(); if(ects(nds())) { if(rce()==button) { ible(false); } else if(rce()==text) { ible(false); } } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e) { Component =null; if(rce() instanceof Component) { =(Component)rce(); if(!=this) move=true; e=tMouseEvent(,e,this); if(move) { word版本 . x=(); y=(); int w=.getSize().width , h=.getSize().heig ht; .setLocation(x-w/2,y-h/2); } } } } public class Test { public static void main(String args[]) { Win win=new Win(); } } 16.进一步改进本章例子7.33,要求一个按钮在移动时,不允许和其他按钮相交。 答: import .*; import .*; class Win extends Frame implements KeyListener { Button b[]=new Button[8]; int x,y; Win() { setLayout(new FlowLayout()); for(int i=0;i<8;i++) { b[i]=new Button(""+i); b[i].addKeyListener(this); add(b[i]); } addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (0); } word版本 . } ); setBounds(10,10,300,300); setVisible(true); validate(); } public void keyPressed(KeyEvent e) { boolean move=false; Button button=(Button)rce(); Rectangle buttonrect=nds(); String str=el(); int xx=nt(str); x=nds().x; y=nds().y; if(Code()==_UP) { y=y-2; if(y<=0) y=0; } else if(Code()==_DOWN) { y=y+2; if(y>=300) y=300; } else if(Code()==_LEFT) { x=x-2; if(x<=0) x=0; } else if(Code()==_RIGHT) { x=x+2; if(x>=300) x=300; } ation(x,y); for(int k=0;k<8;k++) { word版本 .
版权声明:本文标题:《Java2实用教程》课后习题参考答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702857295h433485.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论