Java应用技术实验指导书20xx0909(12计科)

时间:2024.4.13

实验一 Java程序开发环境、基本数据类型与控制语句

一、实验目的及要求

1. 安装并配置Java运行开发环境;

2. 掌握开发Java应用程序的3个步骤:编写源文件、编译源文件和运行应用程序;

3. 学习同时编译多个Java源文件;

4. 掌握char型数据和int型数据之间的相互转换,同时了解unicode字符表;

5. 掌握使用if…else分支和while循环语句解决问题。

二、实验学时

6学时

三、实验任务

【内容】

1.安装JDK,设置环境变量PATH和CLASSPATH。

1)下载JDK

为了建立基于SDK的java运行环境,需要先下载sun的免费SDK软件包。在浏览器中输入进入sun公司官方网站页面。在页面右边“Popular Downloads”栏中可看到最新版的JDK软件包(JDK1.6),并下载。

2)安装JDK

运行下载的“jdk-6u1-windows-i586-p.exe”软件包,在安装过程中可以设置安装路径及选择组件,默认的组件选择是全部安装,安装成功后,其中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,demo文件夹中包含开源代码程序实例。

3)JDK中主要文件夹和文件

安装成功后,d:\java\jdk1.6中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,sample文件夹包含开源代码程序实例,src压缩文件中包含类库开源代码。

设置环境变量

JDK中的工具都是命令行工具,需要从命令行即MS-DOS提示符下运行它们。以Windows XP为例说明设置过程。 右击桌面“我的电脑”图标,选择“属性”菜单

在“高级”选项卡中单击“环境变量”按钮,将出现“环境变量”设置界面

在“系统变量”框中点击“新建”按钮,在出现的“编辑系统变量”对话框中,在“变量名”栏的文本框内输入“JavaHome”,在变量值栏的文本框内输入“d:\java\jdk1.6”(即jdk安装的主目录)

在“系统变量”框中选择“path”,然后单击“编辑”按钮,在出现的“编辑系统变量”对话框中,在“变量值”栏的命令后添加“;%JavaHome%\bin”。

在“系统变量”框中,单击“新建”按钮,在出现的“新建系统变量”的对话框中,在“变量名”栏中输入“classpath”,在变量值栏输入“.;%JavaHome%\lib”。其中“.”表示当前目录。

设置完成后,单击“开始”->“所有程序”->“附件”->“命令提示符”打开DOS窗口,在命令行提示符输入“java”或“javac”回车后,如果出现其用法参数提示信息,则安装正确。

2.安装Eclipse,并熟悉如何使用。

将下载的ZIP包解压缩到D盘,双击D:\eclipse\eclipse.exe来启动Eclipse。第一次启动时会弹出一个选择工作空间的对话框,输入“D:\workspace”,单击“OK”,开始运行Eclipse。

3. 一个简单的应用程序

? 实验要求:

编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。

? 程序运行效果示例:

程序运行效果如下图所示:

1

? 程序模板: Hello.java public class Hello { public static void main (String args[ ]) { 【代码1】 //命令行窗口输出"你好,很高兴学习Java" A a=new A(); a.fA(); } } class A { void fA() { 【代码2】 //命令行窗口输出"We are students" } } ? 实验后的练习: 1. 编译器怎样提示丢失大括号的错误? 2. 编译器怎样提示语句丢失分号的错误? 3. 编译器怎样提示将System写成system这一错误? 4. 编译器怎样提示将String写成string这一错误? 4.联合编译 ? 实验要求: 编写4个源文件:MainClass.java、A.java、B.java和C.java,每个源文件只有一个类,MainClass.java是一个应用程序(含有main方法),使用了A、B和C类。将4个源文件保存到同一目录中,例如:C:\100,然后编译MainClass.java。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

模板1:MainClass.java

public class MainClass

{

public static void main (String args[ ])

{

【代码1】 //命令行窗口输出"你好,只需编译我"

A a=new A();

a.fA();

B b=new B();

b.fB();

}

}

2

模板2 :A.java

public class A

{

void fA()

{

【代码2】 //命令行窗口输出"I am A"

}

}

模板3 :B.java

public class B

{

void fB()

{

【代码3】 //命令行窗口输出"I am B"

}

}

模板4 :C.java

public class C

{

void fC()

{

【代码4】 //命令行窗口输出"I am C"

}

}

? 实验后的练习:

1. 将Hello.java编译通过后,修改A.java源文件中的代码,在命令行窗口输出“我是A类”。要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序MainClass。

5.输出希腊字母表。

? 实验要求:

编写一个Java应用程序,该程序在命令行窗口输出希腊字母表。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序模板:

GreekAlphabet.java

public class GreekAlphabet

{

public static void main (String args[ ])

{

int startPosition=0,endPosition=0;

char cStart='α',cEnd='ω';

【代码1】 //cStart做int型转换据运算,并将结果赋值给startPosition

【代码2】 //cEnd做int型转换运算,并将结果赋值给endPosition

3

System.out.println("希腊字母\'α\'在unicode表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for(int i=startPosition;i<=endPosition;i++) { char c='\0'; 【代码3】 //i做char型转换运算,并将结果赋值给c System.out.print(" "+c); if((i-startPosition+1)%10==0) System.out.println(""); } } } ? 实验后的练习: 1. 将一个double型数据直接赋值给float型变量,程序编译时提示怎样的错误? 2. 在应用程序的main方法中增加语句: float x=0.618; 程序能编译通过么? 3. 在应用程序的main方法中增加语句: byte y=128; 程序能编译通过么? 4. 在应用程序的main方法中增加语句: int z=(byte)128; 程序输出变量z的值是多少? 6.猜数字游戏。 ? 实验要求: 编写一个Java应用程序,实现下列功能: 1) 程序随机分配给客户一个1—100之间的整数; 2) 用户在输入对话框中输入自己的猜测; 3) 程序返回提示信息,提示信息分别是:“猜大了”、“猜小了”和“猜对了”; 4) 用户可根据提示信息再次输入猜测,直到提示信息是“猜对了”。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

GuessNumber.java

import javax.swing.JOptionPane;

public class GuessNumber

{

public static void main (String args[ ])

{

System.out.println("给你一个1至100之间的整数,请猜测这个数"); int realNumber=(int)(Math.random()*100)+1;

int yourGuess=0;

String str=JOptionPane.showInputDialog("输入您的猜测:"); yourGuess=Integer.parseInt(str);

while(【代码1】) //循环条件

4

{

if(【代码2】) //条件代码

{

str=JOptionPane.showInputDialog("猜大了,再输入你的猜测:");

yourGuess=Integer.parseInt(str);

}

else if(【代码3】) //条件代码

{

str=JOptionPane.showInputDialog("猜小了,再输入你的猜测:");

yourGuess=Integer.parseInt(str);

}

}

System.out.println("猜对了!");

}

}

? 实验后的练习:

1. 用“yourGuess>realNumber”替换【代码1】,可以么?

2. 语句:“System.out.println(“猜对了!”);”为何要放在while循环语句之后?放在while语句的

循环体中合理吗?

【结果】

将本次上机实验结果按照以上内容依次填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、试验日期。 5

实验二 类与对象、继承

一、实验目的及要求

1. 使用类来封装对象的属性和功能;

2. 掌握类变量与实例变量,以及类方法与实例方法的区别;

3. 掌握使用package和import语句;

4. 巩固以下概念:子类的继承性,子类对象的创建过程,成员变量的继承与隐藏,方法的继承与重写。

二、实验学时

8学时

三、实验任务

【内容】

1.三角形、梯形和圆形的类封装

? 实验要求:

编写一个Java应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:

a) Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。

b) Lader类具有类型double的上底、下底、高、面积属性,具有返回面积的功能。

c) Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。 ? 程序运行效果示例:

程序运行效果如下图所示:

? 程序模板:

AreaAndLength.java

class Trangle

{

double sideA,sideB,sideC,area,length;

boolean boo;

public Trangle(double a,double b,double c)

{

【代码1】 //参数a,b,c分别赋值给sideA,sideB,sideC

if(【代码2】) //a,b,c构成三角形的条件表达式

{

【代码3】 //给boo赋值。

}

else

{

【代码4】 //给boo赋值。

}

}

double getLength()

{

【代码5】 //方法体,要求计算出length的值并返回

}

public double getArea()

6

{

if(boo)

{

double p=(sideA+sideB+sideC)/2.0;

area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;

return area;

}

else

{

System.out.println("不是一个三角形,不能计算面积"); return 0;

}

}

public void setABC(double a,double b,double c)

{

【代码6】 //参数a,b,c分别赋值给sideA,sideB,sideC

if(【代码7】) //a,b,c构成三角形的条件表达式

{

【代码8】 //给boo赋值。

}

else

{

【代码9】 //给boo赋值。

}

}

}

class Lader

{

double above,bottom,height,area;

Lader(double a,double b,double h)

{

【代码10】 //方法体,将参数a,b,c分别赋值给above,bottom,height }

double getArea()

{

【代码11】 //方法体,,要求计算出area返回

}

}

class Circle

{

double radius,area;

Circle(double r)

{

【代码12】 //方法体

}

7

double getArea()

{

【代码13】 //方法体,要求计算出area返回

}

double getLength()

{

【代码14】 //getArea方法体的代码,要求计算出length返回

}

void setRadius(double newRadius)

{

radius=newRadius;

}

double getRadius()

{

return radius;

}

}

public class AreaAndLength

{

public static void main(String args[])

{

double length,area;

Circle circle=null;

Trangle trangle;

Lader lader;

【代码15】 //创建对象circle

【代码16】 //创建对象trangle。

【代码17】 //创建对象lader

【代码18】 // circle调用方法返回周长并赋值给length

System.out.println("圆的周长:"+length);

【代码19】 // circle调用方法返回面积并赋值给area

System.out.println("圆的面积:"+area);

【代码20】 // trangle调用方法返回周长并赋值给length

System.out.println("三角形的周长:"+length);

【代码21】 // trangle调用方法返回面积并赋值给area

System.out.println("三角形的面积:"+area);

【代码22】 // lader调用方法返回面积并赋值给area

System.out.println("梯形的面积:"+area);

【代码23】 // trangle调用方法设置三个边,要求将三个边修改为12,34,1。

【代码24】 // trangle调用方法返回面积并赋值给area

System.out.println("三角形的面积:"+area);

【代码25】 // trangle调用方法返回周长并赋值给length

System.out.println("三角形的周长:"+length);

}

}

? 实验后的练习:

8

1. 程序中仅仅省略【代码15】,编译能通过吗? 2. 程序中仅仅省略【代码16】,编译能通过吗? 3. 程序中仅仅省略【代码15】,运行时出现怎样的异常提示? 4. 给Trangle类增加3个方法,分别用来返回3个边:sideA、sideB和sideC。 5. 让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。 2.实例成员与类成员。 ? 实验要求: 按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

Example.java

class A

{

【代码1】 //声明一个float型实例变量a

【代码2】 //声明一个float型类变量b,即static变量b void setA(float a)

{

【代码3】 //将参数a的值赋值给成员变量a

}

void setB(float b)

{

【代码4】 //将参数b的值赋值给成员变量b

}

float getA()

{

return a;

}

float getB()

{

return b;

}

void inputA()

{

System.out.println(a);

}

static void inputB()

{

System.out.println(b);

}

}

public class Example

{

public static void main(String args[])

9

{ 【代码5】 //通过类名操作类变量b,并赋值100 【代码6】 //通过类名调用方法inputB() A cat=new A(); A dog=new A(); 【代码7】 //cat象调用方法setA(int a)将cat的成员a的值设置为200 【代码8】 //cat调用方法setB(int b)将cat的成员b的值设置为400 【代码9】 //dog象调用方法setA(int a)将dog的成员a的值设置为150 【代码10】 //dog调用方法setB(int b)将dog的成员b的值设置为300 【代码11】 //cat调用inputA()。 【代码12】 //cat调用inputB()。 【代码13】 //dog调用inputA()。 【代码14】 //dog调用inputB()。 } } ? 实验后的练习: 1. 将inputA()方法中的 System.out.println(a); 改写为 System.out.println(a+b); 编译是否出错?为什么? 2. 将inputB()方法中的 System.out.println(b); 改写为 System.out.println(a+b); 编译是否报错?为什么? 3.使用package语句与import语句。 ? 实验要求: 创建一个java包,名为“chan”;定义一个学生类student1,分别定义num,name,sex三个属性,访问修饰符分别是private、无修饰符和public修饰符。在主类student中创建学生类的对象,并且分别设置学号,姓名和性别的初始值,在主类中调用对象。用import语句导入学生包fxj_stu,分别定义num,name,sex三个属性,访问修饰符分别是private、无修饰符和public修饰符,然后在主类中创建对象,修改其属性值,看能否成功,如果不能,改变其访问修饰符,然后再观察结果。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

student.java

package chan;

import fxj.fxj_stu;

class student1{

public int num; String name; public String sex; }

public class student {

10

public static void main(String[] args)

{

student1 new_student=new student1();

new_student.num=14;

new_student.name="chan";

new_student.sex="男";

fxj_stu xiaming=new fxj_stu(); xiaming.num=19; xiaming.name="夏明"; xiaming.sex="男"; System.out.println("输出我的基本信息:"); System.out.println("号码:"+new_student.num); System.out.println("姓名:"+new_student.name); System.out.println("性别:"+new_student.sex); System.out.println("输出夏明的基本信息:"); System.out.println("号码:"+xiaming.num); System.out.println("姓名:"+xiaming.name);

System.out.println("性别:"+xiaming.sex);

}

}

fxj_stu.java

package fxj;

public class fxj_stu {

public static int num=17;

public static String name="付小姐"; public static String sex="女";

public static void main(String[] args)

{

System.out.println("输出付小姐的基本信息:");

fxj_stu fuxiaojun=new fxj_stu();

}

? System.out.println("号码:"+fuxiaojun.num); System.out.println("姓名:"+fuxiaojun.name); System.out.println("性别:"+fuxiaojun.sex); } ?实验后的练习:

1. 将访问修饰符权限全改为public,可以在不同包中访问吗?可以不同类中被访问吗?

2. 将student1中的num的权限改为private,能否通过编译?为什么?

3. 将fxj包中的num和name改为private和default,能否通过编译?为什么?

【结果】

将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、试验日期。 11

实验三 字符串、时间与数字类

一、实验目的及要求

1. 掌握String类的常用方法

2. 掌握Date类以及Calendar类的常用方法;

3. 掌握BigInteger类的常用方法。

二、实验学时

6学时

三、实验任务

【内容】

1.String类的常用方法。

? 实验要求:

编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创建字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序模板:

StringExample.java

class StringExample

{ public static void main(String args[])

{ String s1=new String("you are a student"),

s2=new String("how are you");

if(【代码1】) // 使用equals方法判断s1与s2是否相同

{

System.out.println("s1与s2相同");

}

else

{

System.out.println("s1与s2不相同");

}

String s3=new String("22030219851022024");

if(【代码2】) //判断s3的前缀是否是“220302”。

{

System.out.println("吉林省的身份证");

}

String s4=new String("你"),

s5=new String("我");

if(【代码3】)//按着字典序s4大于s5的表达式。

{

System.out.println("按字典序s4大于s5");

}

else

{

System.out.println("按字典序s4小于s5");

12

}

int position=0;

String path="c:\\java\\jsp\\A.java";

position=【代码5】 //获取path中最后出现目录分隔符号的位置

System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position); String fileName=【代码6】//获取path中“A.java”子字符串。

System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName); String s6=new String("100"),

s7=new String("123.678");

int n1=【代码7】 //将s6转化成int型数据。

double n2=【代码8】 //将s7转化成double型数据。

double m=n1+n2;

System.out.println(m);

String s8=【代码9】 //String调用valuOf(int n)方法将m转化为字符串对象 position=s8.indexOf(".");

String temp=s8.substring(position+1);

System.out.println("数字"+m+"有"+temp.length()+"位小数") ;

String s9=new String("ABCDEF");

char a[]=【代码10】 //将s8存放到数组a中。

for(int i=a.length-1;i>=0;i--)

{

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

}

}

}

? 实验后的练习:

1. 程序中的s6改写成

String s6=new String(“1a12b”);

运行时提示怎样的错误?

2. 请用数组a的前3个单元创建一个字符串并输出该串。

3. 请给出获取path中“jsp”子字符串的代码。

4. 在程序的适当位置增加如下代码,注意输出的结果。

String str1=new String(“ABCABC”),

str2=null,

str3=null,

str4=null;

str2=str1.replaceAll(“A”,”First”);

str3=str2.replaceAll(“B”,”Second”);

str4=str3.replaceAll(“C”,”Third”);

System.out.println(str1);

System.out.println(str2);

System.out.println(str3);

System.out.println(str4);

5. 可以使用Long类中的下列static方法得到整数各种进制的字符串表示: Public static String toBinaryString(long i)

Public static String toOctalString(long i)

13

Public static String toHexString(long i) Public static String toString(long i,int p) 其中的toString(long i, int p)返回整数i的p进制表示。请在适当位置添加代码输出12345的二进制、八进制和十六进制表示。 6. 在适当位置添加代码,分别输出数字m的整数部分和小数部分。 2.比较日期的大小。 ? 实验要求: 编写一个Java应用程序,用户从输入对话框输入了两个日期,程序将判断两个日期的大小关系,以及两个日期之间的间隔天数。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

DateExample.java

import java.util.*;

import javax.swing.JOptionPane;

public class DateExample

{

public static void main(String args[ ])

{

String str=JOptionPane.showInputDialog("输入第一个日期的年份:");

int yearOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog("输入该年的月份:");

int monthOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog("输入该月份的日期:");

int dayOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog("输入第二个日期的年份:");

int yearTwo=Integer.parseInt(str);

str=JOptionPane.showInputDialog("输入该年的月份:");

int monthTwo=Integer.parseInt(str);

str=JOptionPane.showInputDialog("输入该月份的日期:");

int dayTwo=Integer.parseInt(str);

Calendar calendar=【代码1】 //初始化日历对象

【代码2】 //将calendar的时间设置为yearOne年monthOne月dayOne日

long timeOne=【代码3】 //calendar表示的时间转换成毫秒

【代码4】 //将calendar的时间设置为yearTwo年monthTwo月dayTwo日

long timeTwo=【代码5】 //calendar表示的时间转换成毫秒。

Date date1=【代码6】 // 用timeOne做参数构造date1

Date date2=【代码7】 // 用timeTwo做参数构造date2

if(date2.equals(date1))

{

System.out.println("两个日期的年、月、日完全相同");

}

14

else if(date2.after(date1)) { System.out.println("您输入的第二个日期大于第一个日期"); } else if(date2.before(date1)) { System.out.println("您输入的第二个日期小于第一个日期"); } long days=【代码8】//计算两个日期相隔天数 System.out.println(yearOne+"年"+monthOne+"月"+dayOne+"日和" +yearTwo+"年"+monthTwo+"月"+dayTwo+"相隔"+days+"天"); } } ? 实验后的练习: 1. Calendar对象可以将时间设置到年、月、日、时、分、秒。请改进上面的程序,使用户输入的两个日期包括时、分、秒。 3.处理大整数。 ? 实验要求: 编写一个Java应用程序,计算两个大整数的和、差、积和商,并计算一个大整数的因子个数(因子中不包括1和大整数本身)。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

BigIntegerExample.java

import java.math.*;

class BigIntegerExample

{

public static void main(String args[])

{ BigInteger n1=new BigInteger("987654321987654321987654321"), n2=new BigInteger("123456789123456789123456789"), result=null;

result=【代码1】//n1和n2做加法运算

System.out.println("和:"+result.toString());

result=【代码2】//n1和n2做减法运算

System.out.println("差:"+result.toString());

result=【代码3】//n1和n2做乘法运算

System.out.println("积:"+result.toString());

result=【代码4】//n1和n2做除法运算

System.out.println("商:"+result.toString());

BigInteger m=new BigInteger("1968957"),

COUNT=new BigInteger("0"),

ONE=new BigInteger("1"),

TWO=new BigInteger("2");

15

System.out.println(m.toString()+"的因子有:");

for(BigInteger i=TWO;i.compareTo(m)<0;i=i.add(ONE))

{ if((n1.remainder(i).compareTo(BigInteger.ZERO))==0)

{ COUNT=COUNT.add(ONE);

System.out.print(" "+i.toString());

}

}

System.out.println("");

System.out.println(m.toString()+"一共有"+COUNT.toString()+"个因子"); }

}

【结果】

将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、实验日期。

16

实验四 组件与事件处理

一、实验目的及要求

1. 学习处理ActionEvent事件;

2. 学习处理ItemEvent事件和paint方法;

3. 学习使用布局类。

二、实验学时

8学时

三、实验任务

【内容】

1.算术测试。

? 实验要求:

编写一个算书测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序模板:

Teacher.java

public class Teacher

{ int numberOne,numberTwo;

String operator="";

boolean right;

public int giveNumberOne(int n)

{ numberOne=(int)(Math.random()*n)+1;

return numberOne;

}

public int giveNumberTwo(int n)

{ numberTwo=(int)(Math.random()*n)+1;

return numberTwo;

}

public String giveOperator()

{ double d=Math.random();

if(d>=0.5)

operator="+";

else

operator="-";

return operator;

}

public boolean getRight(int answer)

{ if(operator.equals("+"))

{ if(answer==numberOne+numberTwo)

right=true;

else

17

right=false;

}

else if(operator.equals("-"))

{ if(answer==numberOne-numberTwo)

right=true;

else

right=false;

}

return right;

}

}

ComputerFrame.java

import java.awt.*;

import java.awt.event.*;

public class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult;

Button getProblem,giveAnwser;

Label operatorLabel,message;

Teacher teacher;

ComputerFrame(String s)

{ super(s);

teacher=new Teacher();

setLayout(new FlowLayout());

textOne=【代码1】 //创建textOne,其可见字符长是10 textTwo=【代码2】 //创建textTwo,其可见字符长是10 textResult=【代码3】 //创建textResult,其可见字符长是10 operatorLabel=new Label("+");

message=new Label("你还没有回答呢");

getProblem=new Button("获取题目");

giveAnwser=new Button("确认答案");

add(getProblem);

add(textOne);

add(operatorLabel);

add(textTwo);

add(new Label("="));

add(textResult);

add(giveAnwser);

add(message);

textResult.requestFocus();

textOne.setEditable(false);

textTwo.setEditable(false);

【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器

【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器

【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100,100,450,100);

18

setVisible(true);

validate();

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e) { System.exit(0);

}

}

);

}

public void actionPerformed(ActionEvent e)

{ if(【代码7】) //判断事件源是否是getProblem

{ int number1=teacher.giveNumberOne(100);

int number2=teacher.giveNumberTwo(100);

String operator=teacher.giveOperator();

textOne.setText(""+number1);

textTwo.setText(""+number2);

operatorLabel.setText(operator);

message.setText("请回答");

textResult.setText(null);

}

if(【代码8】) //判断事件源是否是giveAnwser

{ String answer=textResult.getText();

try{

int result=Integer.parseInt(answer);

if(teacher.getRight(result)==true)

{ message.setText("你回答正确");

}

else

{ message.setText("你回答错误");

}

}

catch(NumberFormatException ex)

{ message.setText("请输入数字字符");

}

}

textResult.requestFocus();

validate();

}

}

MainClass.java

public class MainClass

{ public static void main(String args[])

{ ComputerFrame frame;

frame=【代码9】//创建窗口,其标题为:算术测试

}

19

} 2.信号灯。 ? 实验要求: 编写一个带有窗口的应用程序。在窗口的北面添加一个下拉列表,该下拉列表有“红”、“黄”和“绿”三个选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。 ? 程序运行效果示例: 程序运行效果如下图所示:

? 程序模板:

SignalCanvas.java

import java.awt.*;

public class SignalCanvas extends Canvas { int red,green,yellow,x,y,r;

SignalCanvas()

{ setBackground(Color.white); }

public void setRed(int r)

{ red=r;

}

public void setGreen(int g)

{ green=g;

}

public void setYellow(int y) { yellow=y;

}

public void setPosition(int x,int y) { this.x=x;

this.y=y;

}

public void setRadius(int r) { this.r=r;

}

public void paint(Graphics g) { if(red==1)

{ g.setColor(Color.red); }

else if(green==1)

{ g.setColor(Color.green); }

else if(yellow==1)

{ g.setColor(Color.yellow); }

g.fillOval(x,y,2*r,2*r);

}

}

20

SignalFrame.java

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class SignalFrame extends Frame implements ItemListener { Choice choice;

SignalCanvas signal=null;

String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯"; public SignalFrame()

{ signal= new SignalCanvas();

add(signal,BorderLayout.CENTER);

choice=【代码1】 //创建choice

【代码2】 //创建choice添加itemRed

【代码3】 //创建choice添加itemYellow

【代码4】 //创建choice添加itemGreen

【代码5】 //将当前窗口注册为choice的ItemEvent事件监视器 add(choice,BorderLayout.NORTH);

setBounds(100,100,360,300);

setVisible(true);

validate();

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e) { System.exit(0);

}

}

);

}

public void itemStateChanged(ItemEvent e)

{ String item= 【代码6】 // choice返回被选中的条目

int w=signal.getBounds().width;

int h=signal.getBounds().height;

int m=Math.min(w,h);

signal.setRadius(m/6);

if(item.equals(itemRed))

{ if(signal!=null)

{ signal.setRed(1);

signal.setYellow(0);

signal.setGreen(0);

signal.setPosition(w/3,0);

signal.repaint();

}

}

else if(item.equals(itemYellow))

{ if(signal!=null)

{ signal.setRed(0);

signal.setYellow(1);

21

signal.setGreen(0);

signal.setPosition(w/3,h/3);

signal.repaint();

}

}

else if(item.equals(itemGreen))

{ if(signal!=null)

{ signal.setRed(0);

signal.setYellow(0);

signal.setGreen(1);

signal.setPosition(w/3,2*h/3);

signal.repaint();

}

}

}

}

SignalMainClass.java

public class SignalMainClass

{ public static void main(String args[])

{ SignalFrame frame;

frame=new SignalFrame() ;

frame.setTitle("信号灯");

}

}

3.布局与日历。

? 实验要求:

编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter中放置7个按钮和42个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序模板:

CalendarBean.java

import java.util.Calendar;

public class CalendarBean

{

String day[];

int year=2005,month=0;

public void setYear(int year)

{ this.year=year;

}

public int getYear()

22

{ return year;

}

public void setMonth(int month)

{ this.month=month;

}

public int getMonth()

{ return month;

}

public String[] getCalendar()

{ String a[]=new String[42];

Calendar 日历=Calendar.getInstance();

日历.set(year,month-1,1);

int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;

int day=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { day=31;

}

if(month==4||month==6||month==9||month==11)

{ day=30;

}

if(month==2)

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

{ day=29;

}

else

{ day=28;

}

}

for(int i=星期几,n=1;i<星期几+day;i++)

{

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

n++;

}

return a;

}

}

CalendarFrame.java

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class CalendarFrame extends Frame implements ActionListener

{ Label labelDay[]=new Label[42];

Button titleName[]=new Button[7];

String name[]={"日","一","二","三", "四","五","六"};

Button nextMonth,previousMonth;

23

int year=2006,month=10;

CalendarBean calendar;

Label showMessage=new Label("",Label.CENTER);

public CalendarFrame()

{ Panel pCenter=new Panel();

【代码1】 //将pCenter的布局设置为7行7列的GridLayout 布局。

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

{ titleName[i]=new Button(name[i]);

【代码2】//pCenter添加组件titleName[i]。

}

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

{

labelDay[i]=new Label("",Label.CENTER);

【代码3】//pCenter添加组件labelDay[i]。

}

calendar=new CalendarBean();

calendar.setYear(year);

calendar.setMonth(month);

String day[]=calendar.getCalendar();

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

{ labelDay[i].setText(day[i]);

}

nextMonth=new Button("下月");

previousMonth=new Button("上月");

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

Panel pNorth=new Panel(),

pSouth=new Panel();

pNorth.add(previousMonth);

pNorth.add(nextMonth);

pSouth.add(showMessage);

showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" ); ScrollPane scrollPane=new ScrollPane();

scrollPane.add(pCenter);

【代码4】// 窗口添加scrollPane在中心区域

【代码5】// 窗口添加pNorth 在北面区域

【代码6】// 窗口添加pSouth 在南区域。

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==nextMonth)

{ month=month+1;

if(month>12)

month=1;

calendar.setMonth(month);

String day[]=calendar.getCalendar();

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

24

{ labelDay[i].setText(day[i]);

}

}

else if(e.getSource()==previousMonth)

{ month=month-1;

if(month<1)

month=12;

calendar.setMonth(month);

String day[]=calendar.getCalendar();

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

{ labelDay[i].setText(day[i]);

}

}

showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );

}

}

CalendarMainClass.java

public class CalendarMainClass

{ public static void main(String args[])

{ CalendarFrame frame=new CalendarFrame();

frame.setBounds(100,100,360,300);

frame.setVisible(true);

frame.validate();

frame.addWindowListener(new java.awt.event.WindowAdapter()

{ public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0);

}

}

);

}

}

【结果】

将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、试验日期。

25

实验五 多线程

一、实验目的及要求

1. 掌握使用Thread的子类创建线程;

2. 学习使用Thread类创建线程;

3. 学习处理线程同步问题。

二、实验学时

12学时

三、实验任务

【内容】

1.汉字打字练习。

? 实验要求:

编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建1个线程giveWord。线程giveWord每隔2秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。 ? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

2.旋转的行星。

? 实验要求:

编写一个应用程序,模拟月亮围绕地球旋转、地球围绕太阳旋转。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

3.双线程接力。

? 实验要求:

编写一个应用程序,除了主线程外,还有两个线程:first和second。first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60);second负责模拟一个绿色的按钮从坐标(100,60)运动到(200,60)。 ? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

【结果】

将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、试验日期。 26

实验六 输入输出流

一、实验目的及要求

1. 掌握字符输入、输出流的用法;

2. 掌握RandomAccessFile类的使用;

3. 掌握ZipInputStream流的使用。

二、实验学时

10学时

三、实验任务

【内容】

1.文本编辑器。

? 实验要求:

创建一个简单的文本编辑器,可打开文件对话框选择打开一个文件,并在文本区进行编辑,然后把它保存起来。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

2.统计英文单词。

? 实验要求:

使用RandomAccessFile流统计一篇英文中的单词,要求如下:

(1)一共出现了多少个单词;

(2)有多少个互不相同的单词;

(3)给出每个单词出现的频率,并将这些单词按频率大小顺序显示在一个TextArea中。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

3.读取Zip文件。

? 实验要求:

读取book.zip,并将book.zip中含有的文件重新存放到当前目录中的book文件夹中,即将book.zip的内容解压到book文件夹中。

? 程序运行效果示例:

程序运行效果如下图所示:

? 程序:

【结果】

将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。

【注意事项】

实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、试验日期。

27

更多相关推荐:
电子技术应用实验报告

电子技术应用实验报告一实验项目四人智力竞赛抢答器要求1每个参赛者控制一个按钮用按动按钮发出抢答信号2竞赛主持人另有一个开关用于将电路复位3抢答器具有锁存功能即竞赛开始后先按动按钮者将对应的一个LED灯点亮此后其...

电子技术实验教程实验五

实验五场效应管放大器系别姓名学号实验日期一实验目的1学习场效应管放大电路设计和调试方法2掌握场效应管基本放大电路的设计及调整测试方法二实验仪器345678示波器函数信号发生器直流稳压电源数字万用表多功能电路实验...

电子技术应用实验实验报告—抢答器

电子技术应用实验实验报告八一实验项目名称4人智力竞赛抢答器实验内容设计并实现一个4人智力竞赛用抢答器电路具体要求为1每个参赛者控制一个按钮用按动按钮发出抢答信号2竞赛主持人另有一个按钮用于将电路复位3抢答器具有...

模拟电子技术基础实验教程

模拟电子技术基础实验教程教材内容依照教学规律按照由浅入深循序暂进的学习和能力培养原则分层次安排实验内容后一层次的内容以前一层次为基础逐步加深模拟电子技术基础实验教程肇庆学院光机电一体化综合性实验教学示范中心实验...

电子技术实验报告(二极管应用电路)

实验报告二课程名称电子技术实验项目二极管应用电路专业班级姓名座号09实验地点仿真室实验时间指导老师成绩一实验目的1通过二极管的伏安特性的绘制加强对二极管单向导通特性的理解2掌握直流稳压电源的制作及其特点二实验内...

模拟电子技术课程设计实验报告

xxxxxxx学院模拟电子课程设计综合实验班级姓名学号指导教师设计时间电子信息工程xxxxxx120xx5022720xx年xxxxxxx学院二一四年一实验目的通过集成直流稳压电源的设计安装和调试要求学会1选择...

电子科技大学电子技术应用实验报告(四人抢答器)

电子技术应用试验实验报告八电子科技大学实验报告任课教师实验教师姓名学号时间20xx年12月1011日课程名称电子技术应用试验实验名称4人智力竞赛抢答器一实验项目名称4人智力竞赛抢答器实验内容设计并实现一个4人竞...

电子科技大学电子技术实验报告Multisim4.16

416两级放大电路放大倍数的测量416两级放大电路输入电阻的测量416两级放大电路输出电阻的测量未接负载接负载416两级放大电路幅频特性曲线测量电路图416两级放大电路幅频特性曲线

20xx年模拟电子技术实验报告模板[1]

武汉职业技术学院电信学院模拟电子技术实验报告实验科目模拟电子技术实验实验名称实验专业实验者实验时间20xx20xx年第二学期实验指导教师黄老师武汉职业技术学院实验训项目单Trainingitem

《电路与模拟电子技术》EDA实验报告(实验一)

电路与模拟电子技术EDA实验报告实验一一实验目的1验证叠加原理的正确性2验证戴维南定理二实验内容求下图电路的戴维南等效电路用此电路验证叠加原理的正确性1戴维南等效电路第一步测ab间的开路电压第二步测ab间的短路...

电子技术实验报告(集成运放应用电路)

实验报告四课程名称电子技术实验项目集成运放应用电路专业班级姓名座号09实验地点仿真室实验时间指导老师成绩一实验目的1通过运放应用电路的Multisim仿真映证运放应用电路估算方法的可行性二实验内容1比例运算电路...

应用电子技术—电工技术实验教学大纲

电工技术课程实验教学大纲课程名称电工技术课程总学时72课程代码0720xx1实验学时16实验学分05适用专业应用电子技术专业通信技术专业三年制专科一实验教学的性质和任务1实验教学的性质电工技术实验是应用电子技术...

电子技术应用实验教程实验报告(15篇)