admin 管理员组

文章数量: 887031


2023年12月19日发(作者:checkbox勾选颜色改变)

上机练习题

(共包括四部分、16个练习、共96个练习题,请使用“视图”中的“文档结构图”查看)

一、java语言基础和面向对象(教材内容的第1、2、3章)

练习1(4)

掌握:各种数据类型变量的定义和访问,各种数据类型常量的使用,数据类型转换。

1. 编写Applet,其功能为:取两个小于1000的正随机数,若两个数均小于10,先将它们都放大50倍,否则不改变这两个数。最后,求这两个数的和并将结果输出。要求这些功能在主类的方法init( )

中实现,并使输出结果仅保留小数点后4位(不需四捨五入)。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void init( )

{

Label out1=new Label(" ");

Label out2=new Label(" ");

double x,y;

add(out1);

add(out2);

x=( )*1000;

y=( )*1000;

if(x<10&y<10) { x*=50; y*=50; }

t(""+x+"+"+y+" 约等于 ");

t(""+(int)((x+y)*10000)/10000.0);

}

}

2. 请编写一个Applet,其功能为:取一个小于10000的正随机整数,并输出该数的平方根。要求这些功能在主类的方法paint( ) 中实现,并使输出结果在四捨五入后保留小数点后4位。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

word文档 可自由复制编辑

int k;

k=(int)(( )*1000);

ring(""+k+" 的平方根约等于 "+

(int)(((k)+0.00005)*10000)/10000.0,20,20);

}

}

3. 编写一个Applet,其功能为:取一个50~200之间的正随机整数,如果该数为奇数则求它的平方根并转换成float型数后再输出;如果该数为偶数则求它的平方并输出。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

int k;

k=50+(int)(( )*150);

if(k%2!=0)

ring(""+k+" 的平方根约等于 "+(float)(k),20,20);

else

ring(""+k+" 的平方等于 "+k*k,20,20);

}

}

4. 请编写一个Application,其功能为:取一个小于800的正随机整数,将其以如下形式输出:

所取随机数为:***

它的百位数字为:*

它的十位数字为:*

它的个位数字为:*

@程序

//import .*;

public class Class1

{

public static void main (String[] args)

{

int x=(int)(( )*800);

n("所取随机数为:"+x);

n("它的百位数字为:"+x/100);

n("它的十位数字为:"+x%100/10);

n("它的个位数字为:"+x%10);

//try{ ( ); }catch(IOException e){ }

}

}

word文档 可自由复制编辑

练习2(5)

掌握:(1)数组的定义、创建和初始化。

(2)方法的定义和调用。

(3)方法的参数是数组、方法的返回值是数组的编程。

(4)方法的递归调用。

(5)在应用程序中,接受并处理命令行参数。

1.请编写一个Applet,其中定义了两个double类型数组a和b,还定义了一个方法square( )。数组a各元素的初值依次为1.2、2.3、3.4、4.5、5.6, 数组b各元素的初值依次为9.8、8.7、7.6、6.5、5.4、4.3;方法square( )的参数为double类型的数组,返回值为float类型的数组,功能是将参数各元素的平方做为返回数组的元素的值。请在方法paint()中分别以a和b为实在参数调用方法square( ),并将返回值输出在屏幕上。要求调用square( a )的返回数组输出在Applet的一行上,数组的第一个元素的输出坐标为(20,20),其后的每个元素间隔40个像素。调用square( b )的返回数组输出在Applet的一列上,即下标为i+1(i=0,1,2,3,......)的元素的值,在下标为i的元素的值的正下方,其返回数组的第一个元素的输出坐标为(20,40),行隔为20像素。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

double a[ ]={1.2,2.3,3.4,4.5,5.6};

double[ ] b={9.8,8.7,7.6,6.5,5.4,4.3};

public void paint(Graphics g)

{

float[ ] x=new float[];

float[ ] y=new float[];

x=square(a);

y=square(b);

for(int i=0; i<;i++)

ring(""+x[i],20+i*40,20);

for(int i=0; i<;i++)

ring(""+y[i],20,40+i*20);

}

float[ ] square(double x[ ])

{

float[ ] y=new float[];

for(int i=0; i< ; i++)

y[i]=(float)(x[i]*x[i]);

return y;

}

}

word文档 可自由复制编辑

2. 请编写一个Application实现如下功能:在主类中定义两个double类型数组a和b,再定义一个方法sqrt_sum( )。数组a各元素的初值依次为1.2、2.3、3.4、4.5、5.6, 数组b各元素的初值依次为9.8、8.7、7.6、6.5、5.4、4.3;方法sqrt_sum ( )的参数为double类型的数组,返回值类型为float型,功能是求参数各元素的平方根之和。请在主方法main()中分别以a和b为实在参数调用方法sqrt_sum

( ),并将返回值输出在屏幕上。

@程序

//import .*;

public class Class1

{

}

3. 请编写一个Application实现如下功能:在主类中定义方法f1(int n) 和方法f2(int n),它们的功能均为求 n!,方法f1( ) 用循环实现,方法f2( )用递归实现 。在主方法main( ) 中,以4为实在参数分别调用方法f1( ) 和方法f2( ),并输出调用结果。

@程序

//import .*;

public class Class1

{

public static void main (String[] args)

{

n("用循环实现求 n! 的结果(n=4):"+f1(4));

n("用递归实现求 n! 的结果(n=4):"+f2(4));

//try{ char c=(char)( );}catch(IOException e){ }

static double a[ ]={1.2,2.3,3.4,4.5,5.6};

static double b[ ]={9.8,8.7,7.6,6.5,5.4,4.3};

public static void main (String[] args)

{

}

static float sqrt_sum(double[ ] x)

{

}

double y=0.0;

for(int i=0; i<; i++)

y+=(x[i]);

return (float)y;

n("数组a各元素的平方根之和为:"+sqrt_sum(a));

n("数组b各元素的平方根之和为:"+sqrt_sum(b));

//try{ char c=(char)( );}catch(IOException e){ }

word文档 可自由复制编辑

}

static long f1(int n)

{

long k=1;

for(int i=1;i<=n;i++)

k*=i;

}

static long f2(int n)

{

}

if(n==1) return 1;

else return n*f2(n-1);

return k;

}

4. 请编写一个Application实现如下功能:接受命令行中给出的三个参数x1、x2和op,其中x1和x2为float型数,op是某个算数运算符(+、 —、*、/ 之一),请以如下形式输出 x1 和x2执行 op

运算后的结果(假设x1的值为269,x2的值为18,op为运算符—):

269 – 18=251

@程序

public class Class1

{

public static void main (String[] args)

{

float x,y;

char op;

if( >= 3)

{

x=f(args[0]).floatValue( );

y=f(args[1]).floatValue( );

op=args[2].charAt(0);

switch(op)

{

case '+': n(x+"+"+y+"="+(x+y)); break;

case '-': n(x+"-"+y+"="+(x-y)); break;

case '*': n(x+"*"+y+"="+(x*y)); break;

case '/': n(x+"/"+y+"="+(x/y)); break;

default : n("非法运算符!");

}

}

else { n("命令行参数错!"); (-1); }

}

}

5. 编写Application,主类中包含以下两个自定义方法: void printA( int[ ] array )和int[]

word文档 可自由复制编辑

myArray(int n)。方法printA(int[ ] array)的功能是把参数数组各元素在屏幕的一行中输出。方法myArray(int n)的功能是生成元素值是50~100之间的随机值的int型数组,数组元素的个数由参数n指定。在应用程序的main( )方法中,用命令行传入的整数作为myArray(int n) 方法调用时的实际参数,生成一个整型数组,并调用方法printA( )输出该数组的所有元素。

@程序

public class Class1

{

static int n;

public static void main (String[] args)

{

if( > 0)

{

n=nt(args[0]);

int[ ] a=new int[n];

a=myArray(n);

printA(a);

}

else { n("缺命令行参数!"); (-1); }

}

static void printA(int[ ] x)

{

for(int i=0; i< ; i++)

(x[i]+" ");

n( );

return;

}

static int[ ] myArray(int k)

{

int x[ ]=new int[k];

for(int i=0; i< k; i++)

x[i]=50+(int)(( )*50);

return x;

}

}

练习3(3)

掌握: 方法的重载。

1. 请编写一个Applet,其主类名为Applet1,其中包含两个同名方法arrayMin( ),它们都只有一个参数,其中一个arrayMin( )方法的参数为int型数组,返回值类型为int型数;另一个arrayMin( )方法的参数为double型数组,返回值类型为double型数;这两个方法的功能均为返回参数数组元素的最小值。通过paint( )方法调用上述两个同名方法arrayMin( ),求数组a (其元素的值依次为26,82,-3,65,18,9)和数组b (其元素的值依次为3.6,57.2,8.5,78.8) 的最小元素的值并输出。

@程序

import .*;

word文档 可自由复制编辑

import .*;

public class Applet1 extends Applet

{

int a[ ]={26,82,-3,65,18,9};

double b[ ]={3.6,57.2,8.5,78.8};

public void paint(Graphics g)

{

ring("数组a 的最小元素的值为: "+ arrayMin(a),20,20);

ring("数组b 的最小元素的值为: "+ arrayMin(b),20,40);

}

int arrayMin(int x[ ])

{

int y=x[0];

for(int i=1; i< ; i++) if(y>x[i]) y=x[i];

return y;

}

double arrayMin(double x[ ])

{

double y=x[0];

for(int i=1; i< ; i++) if(y>x[i]) y=x[i];

return y;

}

}

2. 请编写一个Application,其主类名为Class1,其中包含三个同名方法mySqrt(),它们都只有一个参数,参数的类型分别为int型、float型和double型,它们的功能均为返回参数的平方根,返回值的类型与参数的类型相同。在主方法main( ) 中调用上面的三个方法,这三个方法的参数均来自命令行参数,最后将计算结果输出在屏幕上。

@程序

public class Class1

{

static int n;

public static void main (String[] args)

{

if( >= 3)

{

int n;

float f;

double d;

n=nt(args[0]);

f=f(args[1]).floatValue( );

d=f(args[2]).doubleValue( );

n(n+"的平方根为: "+mySqrt(n));

n(f+"的平方根为: "+mySqrt(f));

n(d+"的平方根为: "+mySqrt(d));

}

else { n("缺命令行参数!"); (-1); }

word文档 可自由复制编辑

}

static int mySqrt(int x)

{ return (int)(x); }

static float mySqrt(float x)

{ return (float)(x); }

static double mySqrt(double x)

{ return (x); }

}

3. 请编写一个Applet,其主类名为Applet1,其中包含三个同名方法addM(int x, byte y)、addM(float

x,double y)、addM(double x,double y),它们的功能均为求两个参数之和,返回值类型与第一个参数的类型相同。在主类Applet1中,通过paint( )方法调用上面的三个方法,实现12345+67、89.6f+6.9e-8、0.987654321+32.1,然后将计算结果输出,输出位置分别为坐标(20,40)、(20,60)、(20,80)。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

ring("12345+67 = "+ addM(12345,67),20,40);

ring("89.6+6.9e-8 = "+ addM(89.6f,6.9e-8),20,60);

ring("0.987654321+32.1 = "+ addM(0.987654321,32.1),20,80);

}

int addM(int x, byte y)

{ return x+y; }

float addM(float x,double y)

{ return (float)(x+y); }

double addM(double x,double y)

{ return x+y; }

}

练习4(3)

掌握: (1) 类的继承。

(2) 在子类中如何操作父类中的私有属性。

(3) 变量的作用域。

1. 请编写Applet,它由三个类定义组成,类名分别为A、B和Applet1:类A中定义了一个类型为float的属性f和一个类型为byte的私有属性k;类A还定义了一个带有一个参数的构造函数(用于初始化f),和两个公共方法setk( )和getk( ), 其中setk( ) 的功能为给私有属性k赋值,getk( )的功能为返回私有属性k的值。类B是类A的子类,其中仅定义了一个类型为boolean的属性b和一个带两个参数的构造函数(用来为父类中的变量f和本类的变量b做初始化)。主类Applet1中定义了一个初值为123的int型变量n和一个B类的对象x,请通过创建x为上述f和b赋值(f的值为68.963,b的值为true); 在paint()方法中, 给A类的私有属性k赋值66,然后显示f,k,b,n的值。

word文档 可自由复制编辑

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

int n=123;

B x=new B(68.963f,true);

public void paint(Graphics g)

{

((byte)66);

ring("f="+x.f+" k="+( )+" b="+x.b+" n="+n,10,20);

}

}

class A

{

float f;

private byte k;

A(float f1){ f=f1; }

public byte getk( ){ return k; }

public void setk(byte m){ k=m; }

}

class B extends A

{

boolean b;

B(float ff,boolean bb){ super(ff); b=bb; }

}

2. 请按如下要求定义两个类A和B, 类A中定义一个double 类型变量d(将其赋值为8.8)和一个方法int_d(double dd ),该方法的功能是返回参数dd的整数部分。类B是类A的子类,其中定义一个float 类型变量f(将其赋值为18.3)和一个方法int_f(float ff ),该方法的功能是返回参数ff的整数部分。编写一个Application,创建类B的对象b,在主方法main( ) 中先显示d和f的值,然后分别以d和f为实在参数调用int_d( )方法和int_f( )方法,并将它们的返回值显示在屏幕上。

@程序

public class Class1

{

public static void main (String[] args)

{

B b=new B( );

n("d="+b.d+" f="+b.f);

n("d的整数部分="+_d(b.d)+" f的整数部分="+_f(b.f));

}

}

class A

{

double d=8.8;

int int_d(double dd){ return (int)dd; }

}

word文档 可自由复制编辑

class B extends A

{

float f=18.3f;

int int_f(float ff){ return (int)ff; }

}

3. 请编写一个Application ,在其主类中定义一个int 类型变量i ,并令其初值为123 ;主类中还定义了 m1( )和m2( )等两个方法。在主方法main( ) 和方法m1( )中也各定义一个int 类型变量i ,它们的初值分别为456和789 ;方法m1( )的功能是输出它的局部变量i的值;方法m2( )的功能是先输出类变量i 的值 ,然后使类变量i 增加值 6后再次输出其值 ;主方法main( ) 的功能是先输出它的局部变量i的值,然后先后调用m1( )和m2( )实现它们的功能。

@程序

public class Class1

{

static int i=123;

public static void main (String[] args)

{

int i=456;

n("main( ) 中的 i="+i);

m1( );

m2( );

}

static void m1( )

{

int i=789;

n("m1( ) 中的 i="+i);

}

static void m2( )

{

n("类变量 i="+i);

i+=6;

n("加 6后的类变量 i="+i);

}

}

练习5(5)

掌握:(1)方法的参数为类对象、方法的返回值为类对象。

(2)方法覆盖:在子类中调用被子类覆盖了的父类的同名方法。

(3)属性隐藏:在子类中访问被子类隐藏了的父类的同名属性。

(4)构造函数的重载。

1. 请编写一个Applet,它由两个类定义组成:类A中定义了short型变量i和char型变量ch,及一个带两个参数的构造函数(为变量i和ch做初始化)。主类Applet1中创建了两个A类的对象x1(i的初始值为12,ch的初始值为’6’)和x2(i的初始值为62,ch的初始值为65),还定义了一个方法b,b的参数和返回值均为A类的对象,功能为将参数对象的属性i加3,属性ch也加3,使返回结word文档 可自由复制编辑

果为另一个A类的对象(即不破坏实在参数的值)。请在paint()方法中先输出x1、x2的属性值,然后再分别以x1、x2为实在参数调用方法b( ),并输出调用结果,最后再次输出x1、x2的属性值。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

A x1,x2;

public void init( )

{ x1=new A((short)12,'6'); x2=new A((short)62,(char)65); }

public void paint(Graphics g)

{

A a1=new A((short)0,' ');

A a2=new A((short)0,' ');

ring("对象x1的属性值: i=" + x 1.i+" ch="+ x ,20,20);

ring("对象x1的属性值: i=" + x 2.i+" ch="+ x ,20,40);

a1=b(x1); a2=b(x2);

ring("以x1为实参调用方法b( ) 生成的新的A类对象的属性值: i="

+a1.i+" ch="+,20,60);

ring("以x2为实参调用方法b( ) 生成的新的A类对象的属性值: i="

+a2.i+" ch="+,20,80);

ring("调用后,对象x1的属性值: i=" + x 1.i+" ch="+ x ,20,100);

ring("调用后,对象x1的属性值: i=" + x 2.i+" ch="+ x ,20,120);

}

A b(A y)

{

A a=new A((short)0,' ');

a.i=(short)(y.i+3);

=(char)(+3);

return a;

}

}

class A

{

short i;

char ch;

A(short i1,char c1){ i=i1; ch=c1; }

}

2. 请按如下要求定义两个类A和B, 类A中定义一个char类型属性x(将其赋值为65)和一个在小程序窗口中输出x值的方法myPrint()。类B是类A的子类,其中定义一个int 类型属性y(将其赋值为16)和String类型的属性s(将其赋值为“java program!”); 类B中 也定义了一个名为myPrint的方法,其功能为在小程序窗口中输出y和s值;类B中还有一个方法printAll( ),该方法中分别调用父类和子类的myPrint()方法做输出。编写一个Applet,在主类Applet1中创建类B的对象b,调用printAll( )方法输出对象b 的属性值。

@程序

import .*;

import .*;

public class Applet1 extends Applet

word文档 可自由复制编辑

{

B b=new B( );

public void paint(Graphics g)

{

ll( g);

}

}

class A

{

char x=65;

void myPrint(Graphics g)

{ ring("x="+x,20,20); }

}

class B extends A

{

int y=16;

String s="java program!";

void myPrint(Graphics g)

{ ring("y="+y+" s="+s,20,40); }

void printAll( Graphics g)

{ t(g); myPrint(g); }

}

3. 请按如下要求定义两个类A和B, 类A中定义一个方法area(float r), 其返回值类型为float型,该方法的功能是返回半径为r的圆的面积(圆的面积公式为:r2,其中 r是圆的半径)。类B是类A的子类,其中也定义了一个名为area的方法area(float r),该方法的功能是返回半径为r的球的表面积(球的表面积的计算公式为:4πr2,其中r为球的半径),返回值类型也为float型;在类B中还定义了另一个方法myPrint(float r),功能是分别调用父类和子类的方法area( )计算半径相同的圆的面积和球的表面积并输出调用结果。编写一个Application,创建类B的对象b,在主方法main( )中调用myPrint(float r), 输出半径为1.2的圆的面积和半径为1.2的球的表面积。

@程序

public class Class1

{

public static void main (String[] args)

{ B b=new B( ); t(1.2f ); }

}

class A

{

float rear(float r)

{ return (float)*r*r; }

}

class B extends A

{

float rear(float r)

{ return 4*(float)*r*r; }

void myPrint(float r)

{

n("半径为 "+r+"的圆的面积="+(r)

+" 同半径的球的表面积="+rear(r));

word文档 可自由复制编辑

}

}

4. 请编写Applet,它由三个类定义组成: 类A中只定义了一个类型为String的对象x和带有一个参数的构造函数(用来初始化x);类B是类A的子类,其中定义了一个int类型的变量x和一个带两个参数的构造函数(用来为父类中的对象x和类B中的变量x做初始化),还定义了一个方法myPrint( ),功能为输出父类A中的x和其子类B 中的x的值;主类Applet1中定义了B类的对象b,请通过创建b为上述两个x赋值(类A中的x的值为“这是父类的x.”, 类B中的x的值为68),通过paint()方法在坐标(20,30)处显示两个x的值。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

}

class A

{

String x;

}

class B extends A

{

}

5. 请编写Applet,它由三个类定义组成, 类名分别为A、B和Applet1:类A中定义了类型为int的变量i、类型为float的变量f和类型为char的变量ch;类A还定义了三个构造函数,其中,第一个构造函数带有一个int类型的参数(用于初始化i),第二个构造函数带有两个参数(参数类型分别为int和float,用于初始化i和f), 第三个构造函数带有三个参数(参数类型分别为int、float和char,用于初始化i、f和ch)。类B是类A的子类,其中仅定义了一个类型为boolean的变量b和一个带四个参数的构造函数(用来为父类中的变量i、f、ch和本类的变量b做初始化)。主类Applet1中定义了一个初值为32.6的double型变量d和一个B类的对象b,请通过创建b为上述i、f、ch和b赋值(i的值为50,f的值为7.2,ch的值为’h’,b的值为true),用paint()方法在(10,30)位置处显示i,f,ch,b,d的值。

word文档 可自由复制编辑

B b=new B("这是父类的x.",68 );

public void paint(Graphics g)

{ t(g); }

A(String x1){ x=x1; }

int x;

B(String x1,int x2){ super(x1); x=x2;

void myPrint(Graphics g)

{ ring("父类A中x的值="+super.x+" 子类B中x的值="+x,20,30); }

}

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

double d=32.6;

B b=new B(50,7.2f,'h',true );

public void paint(Graphics g)

{

ring("i="+b.i+" f="+b.f+" ch="++" b="+b.b+" d="+d,10,30);

}

}

class A

{

int i;

float f;

char ch;

A(int x){ i=x; }

A(int x,float y){ this(x); f=y; }

A(int x,float y,char z){ this(x,y); ch=z; }

}

class B extends A

{

boolean b;

B(int x,float y,char z,boolean w){ super(x,y,z); b=w; }

}

练习6(5)

掌握:接口、抽象类、最终类的编程;字符串的使用。

1. 定义接口A,接口内有两个方法: method1(int x)和method2(int x,int y),它们的返回值类型均为int。请编写一个Applet,并使其实现接口A:令方法method1(int x)的功能是求5的x次方、方法method2(int x,int y) 的功能是求两参数的最大值。在paint()方法中调用这两个方法,显示method1(2)和 method2(2,8)的结果。

@程序

import .*;

import .*;

public class Applet1 extends Applet implements A

{

public void paint(Graphics g)

{

ring("调用method1(2)的结果: "+method1(2),20,20);

ring("调用method2(2,8)的结果: "+method2(2,8),20,40);

word文档 可自由复制编辑

}

public int method1(int x)

{

int result=1;

for(int i=1;i<=x;i++)

result*=5;

return result;

}

public int method2(int x,int y)

{

return x>y?x:y;

}

}

interface A

{

public abstract int method1(int x);

public abstract int method2(int x,int y);

}

2. 定义名为VolumeArea的抽象类,在其中定义圆周率的值为3.14159,并定义两个抽象方法volume(double r)和area(double r),它们的返回值类型均为float。再定义以类VolumeArea为父类的子类VolumeAndArea,在该子类中实现父类中的抽象方法:方法volume(double r) 的功能是求半径为r的球的体积(公式为:4r33);方法area(double r)的功能是求半径为r的圆的面积(公式为:r2)。请编写一个Application ,在其主类中定义一个VolumeAndArea类的对象x,通过对象x求半径为r(r的值由命令行给定)的球的体积及该球最大切面的圆的面积,并输出计算结果。

@程序

public class Class1

{

static VolumeAndArea x=new VolumeAndArea( );

public static void main(String[ ] args)

{

float r=f(args[0]).floatValue( );

n("半径为"+r+"的球的体积="+(r));

n("半径为"+r+"的圆的面积="+ (r));

}

}

abstract class VolumeArea

{

static final float myPI=3.14159f;

public abstract float volume(double r);

public abstract float area(double r);

}

class VolumeAndArea extends VolumeArea

{

public float volume(double r)

{

return (float)(4*myPI*r*r*r/3);

}

word文档 可自由复制编辑

public float area(double r)

{

return (float)(myPI*r*r);

}

}

3. 定义类A,在其中定义一个final变量myPI,其类型为float,值为3.1416;类A中还定义一个final方法 m1(float r),该方法返回值类型为float,功能是求半径为r的圆的周长(公式为:2r)。再定义类A的子类B,B为final类,其中定义一个返回值类型为void的方法 m2(float r),功能是先调用父类的方法m1( )求半径为r的圆的周长并输出计算结果,然后输出同一个圆的面积(公式为:r2)。请编写一个Application ,利用类B计算并输出半径为5的圆的周长和面积。

@程序

public class Class1

{

static B x=new B( );

public static void main(String[ ] args)

{

x.m2(5);

}

}

class A

{

final float myPI=3.1416f;

public final float m1(float r)

{ return 2*myPI*r; }

}

final class B extends A

{

public void m2(float r)

{

n("半径为"+r+"的圆的周长="+m1(r));

n("半径为"+r+"的圆的面积="+myPI*r*r);

}

}

4.编写应用程序,功能为:从命令行传入一个包含十个字符的字符串,把该字符串与程序中给定的字符串"bacdbcabca"依次比较,统计两个串中对应字符相等的数目。然后输出命令行输入的字符串,并把两个串中对应字符不相等的字符替换为'@'后生成的新串输出,最后输出两个串中相等字符的数目。

@程序

public class Class1

{

public static void main(String args[]) throws IOException

{

if(args[0].length()<10) ("Enter a string:include 10 chars");

else

word文档 可自由复制编辑

}

}

{

}

String str=new String("bacdbcabca");

int n=0;

("The Standard answer:");

for (int x=0;x<();x++)

(" "+(x));

n();

("The Student answer:");

for (int x=0;x<();x++)

{

}

n( );

n("The correct answers:"+n);

if (args[0].charAt(x)==(x))

{ n++; (" "+args[0].charAt(x)); }

(" "+"@"); else

5. 请编写一个Application实现如下功能:接受命令行中给出的一个字母串,先将该串原样输出,然后判断该串的第一个字母是否为大写,若是大写则统计该串中大写字母的个数,并将所有大写字母输出;否则输出信息串”第一个字母不是大写字母!”。

@程序

public class Class1

{

public static void main(String args[])

{

int count=0;

if(!=0)

{

n(args[0]);

if((int)args[0].charAt(0)>=65 && (int)args[0].charAt(0)<=90)

{

for(int i=0;i

if((int)args[0].charAt(i)>=65 && (int)args[0].charAt(i)<=90)

{ (args[0].charAt(i)); Count++; }

n( );

n(“共有 ”+count+” 个大写字母。”);

}

else n("第一个字母不是大写字母!");

}

word文档 可自由复制编辑

}

}

else n("请给出命令行参数!");

练习7(5)

掌握:命令行传参数。

1.请编写一个实现如下功能的Application:比较命令行中给出的两个整数是否相等,并根据比较结果显示"相等"或"不相等"。

public class Class1

{

public static void main (String[] args)

{

int x,y;

String str=" ";

if( < 2)

{

n("请在命令行输入两个参数");

(-1);

}

x=nt(args[0]);

y=nt(args[1]);

if (x==y) str="命令行输入的两个参数相等";

else str="命令行输入的两个参数不相等";

n( str );

}

}

2.编写一个Application程序,比较命令行中给出的两个字符串是否相等,并输出比较的结果。

import .*;

public class Class1

{

public static void main (String[] args)

{

if( < 2 )

{

n( "Usage: string1 string2");

(-1);

}

if(args[0].equals(args[1]))

n( args[0]+" 和 "+args[1]+" 相等 ");

else

n( args[0]+" 和 "+args[1]+" 不等 ");

}

}

word文档 可自由复制编辑

3.从命令行传入3个整数,求3个整数的和、积、最大值、最小值。

public class Class1

{

public static void main (String[] args)

{

int n=;

if(n<3)

n("请输入三个整数!");

else

{

int a,b,c;

a=nt(args[0]);

b=nt(args[1]);

c=nt(args[2]);

n("和:"+(a+b+c));

n("积:"+(a*b*c));

n("最大值:"+(c,(a,b)));

n("最小值:"+(c,(a,b)));

}

}

}

4.请编写一个Application实现如下功能:通过命令行中给出的float型参数x, 和int型参数y(如果参数少于两个,给出提示后退出系统),调用Math类中的方法求x的y次方并输出。

import .*;

public class Class1

{

public static void main (String[] args)

{

int x,y;

String str=" ";

if( < 2)

{

n("Usage:number1 number2");

(-1);

}

x=f(args[0]).floatValue( );

y=nt(args[1]);

str=str+x+" 的 "+y+" 次方 = "+((x,y));

n( str );

}

}

5.编写Application,求从命令行传入任意多个整数的最大值、最小值、平均值。

public class Class1

{

public static void main (String[] args)

{

int n=;

if(n==0)

word文档 可自由复制编辑

n("Please input int numbers!");

else

{

int x[]=new int[n];

for(int i=0;i<;i++)

x[i]=nt(args[i]);

n("max="+ArrayMax(x));

n("min="+ArrayMin(x));

n("ave="+ArrayAve(x));

}

}

static int ArrayMax( int array[] )

{

int max = array[0];

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

{

if ( array[i] > max )

{

max = array[i];

}

}

return max;

}

static int ArrayMin( int array[] )

{

int min = array[0];

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

if ( array[i] < min ) min = array[i];

return min;

}

static int ArrayAve( int array[] )

{

int sum=0;

for( int i =0; i < ; i++)

sum+=array[i];

return sum/;

}

}

6.请编写一个实现如下功能的Application:从命令行依次取三个参数 x, y, op 做算术运算,其中 x,

y为 int 型数据,op 为运算符(+、-、×、÷ 之一),请显示 x op y 的结果。

public class MainParameters

{

public static void main(String args[])

{

int x, y;

char op;

String str=" ";

word文档 可自由复制编辑

}

}

x =nt(args[0]);

y =nt(args[1]);

op=args[2].charAt(0);

switch(op)

{

case '+' : str=str+x+" + "+y+" = "+(x+y); break;

case '-' : str=str+x+" - "+y+" = "+(x-y); break;

case '*' : str=str+x+" * "+y+" = "+(x*y); break;

case '/' : str=str+x+" / "+y+" = "+(x/y); break;

default : n("不能识别的运算符 "+op);

(0);

}

n(str);

二、异常、多线程和输入输出处理(教材内容的第4、5、6章)

练习7 异常处理(1)

了解java中异常的处理:除运行时异常外,其他异常必须要捕捉或声明抛弃。例如,多线程编程或输入输出编程中异常的处理。

1.通过下面的程序了解异常的处理、以及异常发生时程序的执行情况。

import .*;

public class Class1

{

public static void main(String args[])

{

int a=5;

int b=0;

n(a/b);

try

{

n("a="+a);

n(a/b);

n("a*a="+a*a);

}

catch(ArithmeticException e)

{ n("除数为0,这是不行的!"); }

finally

{ n("a*a*a="+a*a*a); }

n("异常已发生,但不影响程序的执行!");

}

word文档 可自由复制编辑

}

练习8 多线程(5)

掌握:java中实现多线程的两种方法,能编写多线程的简单程序。多线程的相关知识还可与管道流结合、或应用他们编写小程序界面的简单动画等(参考练习15)。

1.请编写一个类,类名为subThread ,它是Thread 类的子类。该类中定义了含一个字符串参数的构造函数和run( )方法,方法先在命令行显示线程的名称,然后随机休眠小于1秒的时间,最后显示线程结束信息: "finished"+线程名。编写Application,在其中创建subThread类的三个对象t1、t2、t3,它们的名称分别为"First"、" Second"、" Third",并启动这三个线程。

public class Class1

{

public static void main( String[ ] args )

{

Thread t1 = new subThread( "First" );

Thread t2 = new subThread( "Second" );

Thread t3 = new subThread( "Third" );

( );( );( );

}

}

class subThread extends Thread

{ public subThread( String str )

{ super( str ); }

public void run( )

{

n( " " + getName( ) );

try

{ sleep( ( int )( ( ) * 1000 ) ); }

catch( InterruptedException e )

{ }

n( "Finished!" + getName( ) );

}

}

2.请编写一个类,类名为subThread ,它是Thread 类的子类。该类中定义了含一个字符串参数的构造函数和run( )方法,方法中有一个for循环,循环一共进行5次,循环体中先在命令行显示该线程循环到了第几次,然后随机休眠小于1秒的时间,循环结束后显示线程结束信息: 线程名+"finished"。编写Application,在其中创建subThread类的三个对象t1、t2、t3,它们的名称分别为"First"、" Second"、" Third",并启动这三个线程。

public class Class1

{ public static void main( String[ ] args )

{

Thread t1 = new subThread( "First" );

Thread t2 = new subThread( "Second" );

Thread t3 = new subThread( "Third" );

( ); ( ); ( );

}

}

word文档 可自由复制编辑

class subThread extends Thread

{

public subThread( String str )

{ super( str ); }

public void run( )

{

for(int i=1;i<=5;i++)

{

n( getName( )+", "+i+" times" );

try

{ sleep( ( int )( ( ) * 1000 ) ); }

catch( InterruptedException e )

{ }

}

n( "Finished!" + getName( ) );

}

}

3.请编写一个类,类名为MulThread ,类中定义了含一个字符串参数的构造函数,并实现了Runnable接口,接口中的run( )方法如下实现:方法中先在命令行显示该线程信息,然后随机休眠小于1秒的时间,最后后显示线程结束信息: "finished"+线程名。编写Application,在其中通过Runnable创建MulThread类的三个线程对象t1、t2、t3,并启动这三个线程。

public class Class1

{

public static void main( String[ ] args )

{

Runnable r1 =new MulThread( "First" );

Runnable r2 =new MulThread( "Second" );

Runnable r3 =new MulThread( "Third" );

Thread t1 = new Thread( r1 );

Thread t2 = new Thread( r2 );

Thread t3 = new Thread( r3 );

( );( );( );

}

}

class MulThread implements Runnable

{

String s;

public MulThread(String str)

{ s=str;}

public void run( )

{

n(s);

try

{

( ( int ) ( ( ) * 1000 ) );

}

catch( InterruptedException e ){ }

n( "Finished! " + s );

word文档 可自由复制编辑

}

}

4.编写小程序实现一个数字时钟。

import .*;

import .*;

import ar;

public class Applet1 extends Applet implements Runnable

{

Thread timeThread;

Font wordFont;

int year,month,day;

int weekday;

int hour,minute,second;

public void init()

{

kground();

wordFont=new Font("楷体_gb2312",,50);

}

public void start()

{

if(timeThread==null)

{

timeThread=new Thread(this);

();

}

}

public void stop()

{

if(timeThread!=null)

{

();

timeThread=null;

}

}

public void run()

{

while(true)

{

Calendar time=tance();//创建类的实例

year=();

month=();

day=(_OF_MONTH );

weekday=(_OF_WEEK);

hour=();

minute=();

second=();

repaint ();

word文档 可自由复制编辑

try

{ ( 300); }

catch (InterruptedException e)

{ }

}

}

public void paint (Graphics g)

{

String s1=year+"年"+month+"月"+day+"日";

String s2="星期"+weekday;

String s3=hour+":"+minute+":"+second;

t (wordFont);

or ();

ring (s1, 20, 50);

ring (s2, 20, 120);

ring (s3, 20, 200);

}

}

5.编写小程序实现Runnable接口,通过多线程实现在小程序窗口中不断的显示自然数:从1直到100。

import .*;

import .*;

public class Javaapplet extends Applet implements Runnable

{

int counter=0;

Thread t;

public void init()

{

t=new Thread(this);

();

}

public void run()

{

while( counter<=100 )

{

counter++;

try

{ (1000); }

catch ( InterruptedException e )

{ }

repaint();

}

}

public void paint( Graphics g )

{

setBackground();

or();

t(new Font("Times New Roman",,35));

ring( f(counter),60,60 );

word文档 可自由复制编辑

}

}

练习9 输入输出(15)

掌握:java的输入输出处理

1.编写应用程序,使用()方法读取用户从键盘输入的字节数据,回车后,把从键盘输入的数据存放到数组buffer中,并将用户输入的数据通过()显示在屏幕上。

import .*;

public class Class1

{

public static void main(String args[])

{

byte buffer[]=new byte[128];

int n;

try

{

n=(buffer); //把键盘输入的数据读到数组buffer中,返回实际读取的字节数

for(int i=0;i

((char)buffer[i]);

}

catch(IOException e)

{ (e); }

}

}

2.编写应用程序,使用()方法读取用户从键盘输入的字节数据,回车后,把从键盘输入的数据存放到数组buffer中,并将用户输入的数据保存为指定路径下的文件。

import .*;

public class Class1

{

public static void main(String args[])

{

byte buffer[]=new byte[128];

int n;

try

{

n=(buffer);

FileOutputStream out=new FileOutputStream("./",true);//追加

//FileOutputStream out=new FileOutputStream("./",false);

(buffer,0,n);

( );

}

catch(IOException e)

{ (e); }

}

}

word文档 可自由复制编辑

3. 编写java应用程序,使用FileInputStream类对象读取程序本身(或其他目录下的文件)并显示在屏幕上。

import .*;

public class Class1

{

public static void main (String[] args)

{

try

{

//FileInputStream fis=new FileInputStream("c:");

FileInputStream fis=new FileInputStream("");

int n;

while((n=())!=-1)

((char)n);

();

}

catch(IOException e)

{

n(ng());

}

}

}

4. 编写java应用程序,使用FileInputStream类对象读取程序本身(或其他目录下的文件)到字节数组中,并显示在屏幕上(或存储为其他文件)。

import .*;//读取程序本身,显示在屏幕上

public class Class1

{

public static void main (String[] args)

{

try

{

FileInputStream fis=new FileInputStream("");

byte[] b=new byte[ble()];

n("文件流的大小:"+ble());

int n=(b);

myprint(b);

("实际读取的字节数:"+n);

();

}

catch(IOException e)

{

n(ng());

}

}

static void myprint(byte[] x)

{

for(int i=0;i<;i++)

((char)x[i]);

word文档 可自由复制编辑

}

}

5.编写应用程序,程序中创建一个文件输入流对象fis,读取当前目录下文本文件,该文件内容有如下两行文本:

Java program is easy.

I like it.

从文件输入流fis中读取5个字节数据存放到数组b中,字节数据存放的位置从数组下标3开始。将读取的数据在屏幕输出。

import .*;

public class Class1

{

public static void main( String[ ] args ) throws IOException

{

File file = new File("./");

FileInputStream fis = new FileInputStream( file);

int n=0;

byte b[]=new byte[8];

n=(b,3,5);

();

for(int i=3;i<;i++)//字节数组中从下标3开始的数据转化为字符后输出。

((char)b[i]+"t");

}

}

6.编写应用程序,程序中创建一个文件输出流对象out向当前目录下已有的文件(内容为:"ABCDEFG")写入字符串"abcdefg"中的所有字符和大写字母'A'。

import .*;

public class Class1

{

public static void main (String[] x) throws IOException

{

String s="abcdefg";

byte[] b;

FileOutputStream out=new FileOutputStream("./",true);//添加字节数据

b=es();

(b,0,);

(65);//写入字节数据65---‘A’

();

}

}

7.编写两个线程子类,分别用来创建管道输出流和管道输入流,其中管道输出流向管道发送5个0~20之间的随机整数;管道输入流接收管道中传过来的5个随机整数,并求他们的和。编写Java应用程序测试管道流的数据传送。

//

import .*;

public class TestPipedStream {

public static void main( String[] args ) {

try {//创建没有连接的管道输出流和管道输入流

word文档 可自由复制编辑

PipedOutputStream out = new PipedOutputStream( );

PipedInputStream in = new PipedInputStream( );

t( in );//连接两个管道流

ThreadOut to = new ThreadOut( out );

ThreadIn ti = new ThreadIn( in );

( );//启动线程

( );

}

catch( IOException e ) {

n( e );

}

}

}

/*向管道输出数据的线程子类:发送0~20之间的5个随机整数*/

class ThreadOut extends Thread {

private int[] data1=new int[5]; //管道输出流要发送的数据

private DataOutputStream dos;//声明数据输出流对象dos

public ThreadOut( PipedOutputStream out) {

//将数据输出流和管道输出流连接,以便向管道发送int类型的数据

dos = new DataOutputStream(out);

}

public void run( ) {//重写线程类的方法,线程启动后将执行该方法

try {//向管道中写入数据

for(int i=0;i<;i++) {

data1[i]=(int)(()*20);

n("第"+(i+1)+"次发送数据:"+data1[i]);

nt(data1[i]);//向管道输出流写入数据

try {sleep(1000);} //线程休眠1000毫秒

catch(InterruptedException e) { }

}

( );//关闭流

}

catch( IOException e ) {

n( e );

}

}

}

/*从管道中读取数据的线程子类:接收管道中传过来的5个随机整数*/

class ThreadIn extends Thread {

private int sum=0; //5个随机整数

private DataInputStream dis;//声明数据输入流对象dis

public ThreadIn( PipedInputStream in ) {

//将数据输入流和管道输入流连接,以便从管道读取int类型的数据

word文档 可自由复制编辑

dis = new DataInputStream( in );

}

public void run( ) {//重写线程类的方法,线程启动后将执行该方法

try {//接收输出管道发送的数据:

int x;

for(int i=0;i<5;i++) {

x=t();

sum+=x;

n("第"+(i+1)+"次接收数据:"

+x+"t接收数据的和:"+sum);

try {sleep(1000);}

catch(InterruptedException e) { }

}

( );//关闭流

}

catch( IOException e ) {

n( e );

}

}

}

8.使用RandomAccessFile类及其方法。

import .*;

public class Class1

{

public static void main( String[ ] args )

{

try

{

//以随机方式写入数据

RandomAccessFile out = new RandomAccessFile( "" , "rw" );

nt(12345);//4

har('A');//2

oolean(true);//1

TF("程序设计");//8

//显示字符‘A' 和”程序设计“

(4);

n(ar());

tes(1);//(7);

n(F());

n(ePointer());

n(());

();

();

}

catch( IOException e )

{

word文档 可自由复制编辑

n( e );

( -2 );

}

}

}

9.编写应用程序,使用RandomAccessFile类及其方法,把程序本身分两次显示在屏幕上。第一次直接显示,第二次给每一行添加的行号显示。

import .*;

public class Test

{

public static void main( String[ ] args ) throws IOException

{

RandomAccessFile randomfile = new RandomAccessFile("" , "r" );

String s;

while((s=ne())!=null)

{ n(s); }

long filePointer=0,fileLength=();

(0); //文件指针已到文件尾,将文件指针重设到文件开始位置

int i=1;

while(filePointer

{

s=ne();

n((i++)+" "+s);

filePointer=ePointer();

}

();

}

}

10.在程序所在的目录下有子目录b,目录b下有文本文件。编写应用程序,创建文件对象:

File file=new File("b/");

通过文件对象file得到它的文件名、相对路径、绝对路径、父目录名。

import .*;

public class Class1

{

public static void main( String args[ ] )

{

File file=new File("b/");

n("文件名:" + e( ) );

n("相对路径:" + h( ) );

n("绝对路径:" + olutePath( ) );

n("父目录名:" + ent( ) );

}

}

11.请编写一个名为的Application,其功能为:测验文件是否存在并输出其长度。

word文档 可自由复制编辑

import .*;

public class Class1

{

public static void main (String[] args)

{

File f1=new File("./");

n("is exist:"+( ));

n("file length:"+( ));

}

}

12.编写应用程序:创建目录c:temp,并创建一个文件,向该文件中写入字符串"The first snow

came."共5次。

import .*;

public class Class1

{

public static void main(String args[]) throws IOException

{

File file1=new File("c:temp");

();

File file2=new File(file1,"");

FileOutputStream out1=new FileOutputStream(file2);

String s="The first snow came.";

byte[] b=es();

for(int i=0;i<5;i++)

{

(b,0,);

}

}

}

13.过滤文件并显示。

import .*;

public class Class1

{

public static void main( String[ ] args )

{

try

{

File oDir = new File( "." );

String[ ] strList;

//如果没有命令行参数就取当前目录下的所有文件列表

if( 0 == )

strList = ( );

else

strList = ( new DirFilter(args[0]));

for( int i = 0; i < ; i ++ )

n( strList[ i ] );

}

catch( Exception e )

word文档 可自由复制编辑

{

n( e );

}

}

}

class DirFilter implements FilenameFilter

{

String strPick;

DirFilter( String pickname )

{

k = pickname;

}

public boolean accept( File dir, String name )

{

return th( strPick );

}

}

14.编写java应用程序,使用FileReader类对象读取程序本身(或其他目录下的文件)并显示在屏幕上。

import .*;//读取程序本身,显示在屏幕上

public class Class1

{

public static void main (String[] args)

{

try

{

FileReader fis=new FileReader("");

//FileReader fis=new FileReader("c:");

int n;

while((n=())!=-1)

((char)n);

();

}

catch(IOException e)

{

n(ng());

}

}

}

15.编写应用程序,创建BufferedReader的对象,从某个文本文件中的字符输入数据流中读取一行字符(该文件与程序在同一目录下),跳过10个字节后将其显示出来。

import .*;

public class Class1

{

public static void main(String args[]) throws IOException

{

BufferedReader b_reader=new BufferedReader(new FileReader(""));

String str;

word文档 可自由复制编辑

}

}

b_(10);

str=b_ne();

n(str);

三、图形图像、常用组件和事件处理、布局(教材内容的第7章)

练习10(6)

掌握:(1)绘制字符串、字符、字节(2)字体、字型、字号的使用(3)颜色的设置

1. 请编写一个Applet,其功能为:在坐标(20,30)处以绿色显示“我喜欢绿色。 ” ,在坐标(20,60)处以蓝色显示“我也喜欢蓝色。” 。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint( Graphics g)

{

or(Color. green);

ring("我喜欢绿色。",20,30);

or();

ring("我也喜欢蓝色。",20,60);

}

}

2. 请编写一个Applet,分别以红、绿、黄、粉、白、蓝等六种颜色,在同一行上显示六个数字 1、2、3、4、5、6。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

int j=0;

Color color[ ]=new Color[6];

color[0]=; color[1]=;

color[2]=; color[3]= ;

color[4]=; color[5]=;

for(char ch='1'; ch <= '6'; ch++)

{

or( color[ch-'1']);

ring(" "+ch,10+j,30);

word文档 可自由复制编辑

}

}

}

j+=20;

3. 请编写一个Applet,以不同的灰度值在一行上显示数字 0 - 9 。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

int j=0;

int red=0, green=0,blue=0;

for(char ch='0'; ch <= '9'; ch++)

{

or( new Color(red,green,blue));

ring(" "+ch,10+j,30);

j+=20;

red+=85; green+=85; blue+=85;

}

}

}

4. 编写Java小程序,将字符串“I like java!”重复显示5次,每次显示在1行上。要求显示字体为"Courier"字体,字体风格为斜体,第1行字符串的字体大小是15,后面的每一行的字体大小依次增加5,每行的间隔为30像素。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

Font f1;

int size=15;

int y=30;

String str="I like java!";

public void paint(Graphics g)

{

for(int i=0;i<5;i++)

{

f1=new Font("Courier", ,size);

t(f1);

ring(str,30,y);

size+=5;

y+=30;

}

}

}

word文档 可自由复制编辑

5. 请编写一个Applet,其功能为:在标签上输出字符串 "This is a Java program. "。要求标签以蓝色为背景,以红色为前景。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

Label p=new Label("This is a Java program. ");

public void init( )

{

add(p);

kground();

eground();

}

}

6. 请编写一个Applet,以不同颜色在一列上显示字符串 "每个字的颜色都不同!" 。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

int j=0;

char[ ] b={ '每', '个', '字', '的', '颜', '色', '都', '不', '同', '!'};

int red=188, green=220,blue=99;

for(int i=0; i < ; i++)

{

or( new Color(red,green,blue));

ring(" "+b[i],20,20+j);

j+=15;

red+=35; green+=55; blue+=85;

}

}

}

练习11(6)

掌握:(1)画直线(2)画长方形、画正方形(3)画圆、画椭圆、画扇形、画弧

1. 编写Java小程序,将小程序窗口的右上的1/4区域用红色画成实心的长方形;将小程序窗口的左下的1/4区域用蓝色画成实心的长方形。

@程序

import .*;

import .*;

word文档 可自由复制编辑

public class Applet1 extends Appl et

{

public void paint(Graphics g)

{

int w=getSize().width; int h=getSize().height;

or(); ct(w/2,0,w/2,h/2);

or(); ct(0,h/2,w/2,h/2);

}

}

2. 请编写一个Applet,其功能为:在Applet窗口中用绿色画一个左上角坐标为 (10,10)、高为90、宽为110的矩形框;然后画内切于该矩形的红色椭圆。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint( Graphics g )

{

or( ); ct(10,10,110,90);

or( ); al(10,10,110,90);

}

}

3. 请编写一个Applet,其功能为:在Applet窗口中先画一条从坐标(100,100)到坐标(200,100)的绿线;然后以该线中心点为圆心,画半径为50,边框为红色的圆。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint( Graphics g )

{

or(); ne(100,100,200,100);

or(); al(50,50,100,100);

}

}

4. 编写Applet,功能为:在Applet窗口中以坐标(100,20)为左上角,填充边长为80、厚度为10的红色正方形框;再以坐标(10,20)为左上角,画边长为80的绿色正方形,然后将其擦去;最后在窗口的状态栏中显示字符串“画的是正方形。”。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

or(); ct(100,20,80,80);

or(getBackground( )); ct(110,30,60,60);

or(); ct(10,20,80,80);

word文档 可自由复制编辑

showStatus("画的是正方形");

for(int i=0; i < _VALUE -1 ; i++);

or(getBackground( )); ct(10,20,80,80);

}

}

5. 请编写一个Applet,其功能为:在窗口中画一个任意的红边的六边形,然后将其擦去。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

int[ ] x={40,80,100,180,200,70};

int[ ] y={40,10,30,70,180,90};

public void paint(Graphics g)

{

or(); lygon(x,y,6);

for(int i=0;i<123456789;i++);

or(getBackground( ));

ct(0,0,getSize().width,getSize().height);

}

}

6. 请编写一个实现如下功能的Applet:在窗口中从60°开始逆时针画一个30°的绿色扇形,并令其内切于左上角坐标为 (100,60)、长为110、宽为90的矩形区域。

@程序

import .*;

import .*;

public class Applet1 extends Applet

{

public void paint(Graphics g)

{

or();

c(100,60,90,110,60,30);

}

}

练习12(3)

掌握:标签、文本框的编程。

1. 请编写一个Applet,其功能为:在Applet窗口上摆放两个标签。构造第一个标签时,令其上面的文本信息为“我将参加Java程序设计考试。”,将第二个标签构造为空标签。程序将第一个标签的信息复制到第二个标签上,并增加信息“希望自己考取好成绩。”。要求第一个标签以红色为背景,绿色为前景;第二个标签以绿色为背景,蓝色为前景。

@程序

import ;

import .*;

word文档 可自由复制编辑

public class Applet1 extends Applet

{ Label p1=new Label("我将参加Java程序设计考试。");

Label p2=new Label(" ");

public void init( )

{

add(p1);

add(p2);

t(t( )+ "希望自己考取好成绩。");

kground(Color. red);

eground();

kground(Color. green);

eground();

}

}

2. 请编写一个Applet实现如下功能:定义一个用于给出提示信息的标签和两个文本框,其中,一个文本框用于获取用户给出的一个整数,求该数的平方后将计算结果置在另一个文本框中输出。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

Label p;

TextField in,out;

int x;

String str=" ";

public void init( )

{

p=new Label("请输入一个整数: ");

in=new TextField(18);

out=new TextField(28);

add(p); add(in); add(out);

ionListener(this);

}

public void actionPerformed(ActionEvent evt)

{ x=nt(t()); repaint( ); }

public void paint(Graphics g)

{ str=x+" 的平方为: "+(long)(x*x); t(str); }

}

3. 请编写一个Applet实现如下功能:定义三个文本框。其中,第一个文本框上面的文本信息为“请输入口令:”;第二个文本框为口令输入域;第三个文本框上的信息由程序设置:若口令(假设口令为字符串”MyKey”)正确,则设置为“通过!”,否则设置为“口令错!”;。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements ActionListener

word文档 可自由复制编辑

{

TextField p;

TextField in;

TextField out;

String s="";

public void init( )

{

p=new TextField ("请输入口令: ");

in=new TextField(18);

out=new TextField(38);

add(p); add(in); add(out);

ionListener(this);

}

public void actionPerformed(ActionEvent evt)

{

s=t();

if(("MyKey")) t("通过!");

else t("口令错!");

}

}

练习13(8)

掌握:按钮、单选按钮、复选按钮、列表的编程。

1. 编写Applet, 其中包含两个按钮b1、b2,初始时b1的前景为兰色,b2的前景为红色,它们的标签分别为”兰按钮”、”红按钮”。当点击b1时,通过paint()方法在坐标(100,100)处画一个兰色的椭圆框,椭圆的长半轴为30,短半轴为20;点击b2时,在坐标(100,100)处,画一个红色的圆框,圆的半径为50。无论那个按钮被点击,都将该按钮上的标记改为“已按过”,并使该按钮变灰。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

int i;

Button b1,b2;

public void init()

{

b1=new Button("兰按钮"); b2=new Button("红按钮");

add(b1); eground();

add(b2); eground();

ionListener(this); ionListener(this);

}

public void paint(Graphics g)

{

word文档 可自由复制编辑

if(i==1) { or(); al(100,100,60,40);

el("已按过"); eground();

}

if(i==2) { or(); al(100,100,100,100);

el("已按过"); eground();

}

}

public void actionPerformed(ActionEvent e)

{

if(rce()==b1) { i=1; }

if(rce()==b2) { i=2; }

repaint();

}

}

2. 编写Applet, 其中包含两个按钮,它们的标签分别为“画正方形”和“画圆”,点击按钮“画正方形”时,通过paint()方法以坐标(10,10)为左上角画一个边长为60的兰色正方形框;点击按钮“画圆”时,画一个半径为50的红色填充圆,该圆内切于左上角坐标为(100,100)的正方形。如果那个按钮被点击,就使该按钮变得不可见。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

int i; Button btn1, btn2;

public void init()

{

btn1=new Button("画正方形"); btn2=new Button("画圆");

add(btn1); add(btn2);

ionListener(this); ionListener(this);

}

public void paint(Graphics g)

{

if(i==1) { or(Color. blue); ct(10,10,60,60);

ible(false);

}

if(i==2) { or(Color. red); al(100,100,100,100);

ible(false);

}

}

public void actionPerformed(ActionEvent e)

{

if(rce()==btn1) { i=1; }

if(rce()==btn2) { i=2; }

repaint();

}

}

3. 编写Applet, 其中包含两个按钮:按钮上的标签分别为“确定”和“取消”。当点击“确定” 按word文档 可自由复制编辑

钮时,通过paint()方法在坐标(20,80)处,用绿色显示点击“确定”按钮的次数;当点击“取消”

按钮时,通过paint()方法在坐标(20,100)处,用红色显示点击“取消”按钮的次数(要求“确定”和“取消”的次数同时显示在Applet中)。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

int j=0,k=0; Button btn1, btn2;

public void init()

{

btn1=new Button("确定"); btn2=new Button("取消");

add(btn1); add(btn2);

ionListener(this); ionListener(this);

}

public void paint(Graphics g)

{

or();

ring("你点击了"确定"按钮 "+j+" 次",20,80);

or();

ring("你点击了"取消"按钮 "+k+" 次",20,100);

}

public void actionPerformed(ActionEvent e)

{

if(rce()==btn1) j++;

if(rce()==btn2) k++;

repaint( );

}

}

4. 编写Applet, 其中包含两个按钮,初始时两个按钮的前景均为绿色。当点击一个按钮时,通过paint( )方法在坐标(10,50)处显示一幅图象,图象名称为,显示的高、宽分别为50、50;图象与嵌入该小应用程序的网页在同一目录(程序中用到的图片由学生在计算机中找)。当点击另一个按钮时,在窗口的状态栏中输出字符串“好漂亮!”。同时要求当反复点击按钮时,就令被点击按钮的前景变为红色,而使另一个按钮的前景恢复为绿色。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

int i;

Image pic;

Button btn1,btn2;

public void init()

{

btn1=new Button("pic1");

btn2=new Button("pic2");

word文档 可自由复制编辑

add(btn1); eground();

add(btn2); eground();

ionListener(this); ionListener(this);

pic=getImage(getDocumentBase(),"");

}

public void paint(Graphics g)

{

if(i==1) age(pic,10,50,50,50,this);

if(i==2) showStatus("好漂亮!");

}

public void actionPerformed(ActionEvent e)

{

if(rce()==btn1)

{ i=1; eground(); eground(); }

if(rce()==btn2)

{ i=2; eground(); eground(); }

repaint();

}

}

5. 编写Applet, 显示一幅后缀名为jpg的图片,图片显示的左上角坐标为(20,40),宽、高为80、80像素(图片在计算机中查找)。小程序中还包含两个按钮,按钮名称分别为"放大图片"和"缩小图片"。每次按下"放大图片"按钮时,把图片显示的宽、高分别增加10像素;每次按下"缩小图片"按钮时,把图片显示的宽、高分别减小10像素。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ActionListener

{

Image pic;

Button btn1,btn2;

int w=80,h=80;

public void init()

{

pic=getImage(getDocumentBase(),"");

btn1=new Button("放大图片"); btn2=new Button("缩小图片");

add(btn1); add(btn2);

ionListener(this); ionListener(this);

}

public void paint(Graphics g)

{ age(pic,20,40,w,h,this); }

public void actionPerformed(ActionEvent e)

{

if(rce()==btn1) { w+=10; h+=10; }

if(rce()==btn2) { w-=10; h-=10; }

repaint();

}

}

word文档 可自由复制编辑

6. 请编写一个Applet,其功能为:在其窗口中摆放三个单选按钮,令它们的标签分别为“选项1”、“选项2”、“选项3”, 初始时,所有按钮均可见;以后,如果某个单选按钮被选中了,就显示它被选中的信息(如,若点击了第二个单选按钮,则显示“你选择了”选项2””), 并使该单选按钮自身不可见,而使其它单选按钮变为可见的。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ItemListener

{

CheckboxGroup optGroup;

Checkbox opt1,opt2,opt3;

String s="";

boolean b=false;

public void init()

{

optGroup=new CheckboxGroup( );

opt1=new Checkbox("选项1",optGroup,false);

add(opt1); mListener(this);

opt2=new Checkbox("选项2",optGroup,false);

add(opt2); mListener(this);

opt3=new Checkbox("选项3",optGroup,false);

add(opt3); mListener(this);

}

public void paint(Graphics g)

{ if(b) ring("你选择了"+"""+s+""",20,80); }

public void itemStateChanged(ItemEvent e)

{

b=true;

if(rce()==opt1)

{ ible(false); ible(true);

ible(true); s=el( ); }

if(rce()==opt2)

{ ible(true); ible(false);

ible(true); s=el( ); }

if(rce()==opt3)

{ ible(true); ible(true);

ible(false); s=el( ); }

repaint( );

}

}

7. 请编写一个Applet,在其窗口中摆放两复选按钮框,显示它们被选中(那个被选中、或两个均被选中、或两个均未选中)的信息。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements ItemListener

word文档 可自由复制编辑

{

private TextField t;

private Checkbox opt1,opt2;

public void init()

{

t=new TextField(" ",40); add(t);

opt1=new Checkbox("选项1"); add(opt1); mListener(this);

opt2=new Checkbox("选项2"); add(opt2); mListener(this);

}

public void itemStateChanged(ItemEvent e)

{

String s="";

if(te( )) s="选择了选项1";

if(te( )) s=s+"选择了选项2";

t(s);

}

}

8. 使用List列表组件,选择画何种几何图形(黄色矩形、绿色圆、红色椭圆、白色扇形、兰色直线之一),并通知程序实现之。

@程序

import ;

import .*;

import .*;

public class Applet1 extends Applet implements ActionListener , ItemListener

{

List myList;

String itemNames[] =

{ "黄色矩形", "红色圆", "绿色椭圆", "白色扇形", "兰色直线" }; //项目名称

Color colors[] =

{ , , , , }; //颜色对象数组

int j;

boolean b=false;

public void init()

{

myList = new List( 6, false );

for ( int i = 0; i < ; i++ )

( itemNames[ i ] );

add( myList );

ionListener( this );

mListener( this );

}

public void actionPerformed( ActionEvent e ) { }

public void itemStateChanged( ItemEvent e )

{

b=true;

showStatus( ectedItem() + "; index " +

ectedIndex() );

word文档 可自由复制编辑

j = ectedIndex();

repaint();

}

public void paint( Graphics g )

{

if(b)

switch(j)

{

case 0: or( colors[j] );ct(10,10,30,60); break;

case 1: or( colors[j] );al(10,10,30,30); break;

case 2: or( colors[j] );al(10,10,60,30); break;

case 3: or( colors[j] );c(10,10,80,60,30,30); break;

case 4: or( colors[j] );ne(10,10,60,60);

}

}

}

练习14(11)

掌握:(1) 鼠标事件(鼠标进入、移出、压下、点击、释放)的编程。

(2) 键盘事件(按下键、松开键、点击键)的编程。

(3) 布局管理器。

1. 编写Applet, 当鼠标进入Applet时,通过paint()方法以(60,60)为左上角坐标,填充一个颜色为黄色的、边长为60的正方形;鼠标移出时,以(60,120)为左上角坐标,画一个颜色为绿色的、边长为30的正方形框。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements MouseListener

{

int i;

public void init(){ addMouseListener(this); }

public void paint(Graphics g)

{

if(i==1) { or(Color. yellow); ct(60,60,60,60); }

if(i==2) { or(); ct(60,120,30,30); }

}

public void mouseClicked(MouseEvent e){ }

public void mousePressed(MouseEvent e){ }

public void mouseEntered(MouseEvent e){ i=1; repaint(); }

public void mouseExited(MouseEvent e) { i=2; repaint(); }

public void mouseReleased(MouseEvent e) { }

}

2. 编写Applet, 当鼠标进入Applet时,通过paint()方法在坐标(20,50)处,显示一幅图像,图像名称为,显示的高、宽分别为50、80;鼠标移出时,在坐标(70,130)处,显示另一幅图像,图像名称为,显示的高、宽分别为80、60。这些图像与嵌入该小程序的网页在同一目录下(程word文档 可自由复制编辑

序中用到的图像在计算机中找)。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements MouseListener

{

int i;

Image pic1,pic2;

public void init()

{

pic1=getImage(getDocumentBase(),"");

pic2=getImage(getDocumentBase(),"");

addMouseListener(this);

}

public void paint(Graphics g)

{

if(i==1) { age(pic1,20,50,50,80,this); }

if(i==2) { age(pic2,70,130,80,60,this); }

}

public void mouseClicked(MouseEvent e) { }

public void mousePressed(MouseEvent e) { }

public void mouseEntered(MouseEvent e) { i=1; repaint(); }

public void mouseExited(MouseEvent e) { i=2; repaint(); }

public void mouseReleased(MouseEvent e) { }

}

3. 编写Applet, 通过paint()方法在鼠标压下时,在坐标(30,30)处显示一幅图像,图像名称为,显示的高、宽分别为90、90(程序中用到的图像在计算机中找,并使其与嵌入该小程序的网页在同一目录)。点击鼠标时,在窗口的状态栏中输出字符串“这个图像真美丽!”。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements MouseListener

{

int i;

Image pic;

public void init()

{

pic=getImage(getDocumentBase(),"");

addMouseListener(this);

}

public void paint(Graphics g)

{

if(i==1) { age(pic,30,30,90,90,this); }

if(i==2) showStatus(“这个图像真美丽!”);

}

public void mouseClicked(MouseEvent e) { i=2; repaint(); }

word文档 可自由复制编辑

public void mousePressed(MouseEvent e) { i=1; repaint(); }

public void mouseEntered(MouseEvent e){ }

public void mouseExited(MouseEvent e){ }

public void mouseReleased(MouseEvent e){ }

}

4. 编写Applet, 当压下鼠标时,在鼠标压下处显示字符串“释放鼠标将显示图象”,要求显示字体的名称为"Courier"、普通体、字体大小为25。当释放鼠标时,以鼠标释放处为左上角坐标,显示一幅jpg图像,图像显示的宽、高分别为200、120像素(图像在计算机中查找)。

@程序

import .*;

import .*;

import .*;

public class Applet1 extends Applet implements MouseListener

{

int x,y,k;

Image pic;

public void init()

{

pic=getImage(getDocumentBase(),"");

addMouseListener(this);

}

public void paint(Graphics g)

{

if(k==1) {

Font f1=new Font("Courier",,25);

t(f1);

ring("释放鼠标将显示图象。",x,y);

}

if(k==2) { age(pic,x,y,200,160,this); }

}

public void mouseClicked(MouseEvent e){ }

public void mousePressed(MouseEvent e)

{ k=1; x=(); y=(); repaint(); }

public void mouseEntered(MouseEvent e){ }

public void mouseExited(MouseEvent e){ }

public void mouseReleased(MouseEvent e)

{ k=2; x=(); y=(); repaint(); }

}

5.编写Applet, 当按下键盘键时,在Applet中通过paint()方法,在(25,20)位置处显示你按下的键的名称。

@程序

import .*;

import java .awt .event .*;

import .*;

public class Applet1 extends Applet implements KeyListener

word文档 可自由复制编辑

{

String name=" ";

public void init() { addKeyListener(this); requestFocus(); }

} public void paint(Graphics g) { ring ("你按下的键是:"+name,25,20);

public void keyPressed(KeyEvent e)

{ name=Text (Code ());

}

}

repaint(); }

}

public void keyReleased(KeyEvent e) {

public void keyTyped(KeyEvent e) {

6.编写小程序,响应键盘事件:敲击字母r,改变小程序背景色为red;敲击字母b,改变小程序背景色为blue;敲击字母g,改变小程序背景色为green;其他字母,改变小程序背景色为black。

//

import ;

import .*;

import .*;

public class Applet1 extends Applet implements KeyListener

{

char ch;

public void init()

{

addKeyListener( this );

requestFocus();//获取焦点

}

public void paint( Graphics g )

{

if(ch=='r'|ch=='R')

kground();

}

public void keyPressed( KeyEvent e )//键压下时执行

{ }

public void keyReleased( KeyEvent e )//键释放时执行

{ }

public void keyTyped( KeyEvent e )////键敲击时执行

{ ch=Char(); repaint(); }

}

7.编写java小程序,在小程序界面画一个彩色球,当压下键盘上的4个方向键时,彩色球能向指定word文档 可自由复制编辑


本文标签: 输出 方法 显示