第一篇:Java程序设计课程实验代码及答案
Java程序设计课程实验
上机实践1 初识JAVA.................................................................................................................3 实验
1一个简单的应用程序....................................................................................................3 实验
2一个简单的JAVA APPLET程序......................................................................................3 实验
3联合编译........................................................................................................................4 上机实践2 基本数据类型与控制语句........................................................................................5 实验1
输出希腊字母表............................................................................................................5 实验2
回文数............................................................................................................................6 实验3
猜数字游戏....................................................................................................................8 上机实践3 类与对象....................................................................................................................9 实验1
三角形、梯形和圆形的类封装.....................................................................................9 实验
2实例成员与类成员......................................................................................................12 实验
3使用PACKAGE语句与IMPORT语句............................................................................14 上机实践4 继承与接口..............................................................................................................16 实验
1继承..............................................................................................................................16 实验2
上转型对象..................................................................................................................19 实验3 接口回调.....................................................................................................................21 上机实践5 字符串、时间与数字..............................................................................................23 实验
1STRING类的常用方法..................................................................................................23 实验
2比较日期的大小..........................................................................................................24 实验
3处理大整数..................................................................................................................25 上机实践6 组件及事件处理......................................................................................................26 实验1
算术测试......................................................................................................................26 实验2
信号灯..........................................................................................................................29 实验3
布局与日历..................................................................................................................31 上机实践7 组件及事件处理2...................................................................................................35 实验1
方程求根......................................................................................................................35 实验2
字体对话框..................................................................................................................38 实验3
英语单词拼写训练......................................................................................................41 上机实践8 多线程.....................................................................................................................45 实验1
汉字打字练习..............................................................................................................45 实验2
旋转的行星..................................................................................................................47 实验3
双线程接力..................................................................................................................51 上机实践9 输入输出流..............................................................................................................54 实验1
学读汉字......................................................................................................................54 实验2
统计英文单词字..........................................................................................................57 实验2
读取ZIP文件...............................................................................................................61 上机实践10 JAVA 中的网络编程............................................................................................62 实验1
读取服务器端文件......................................................................................................62 实验2
使用套接字读取服务器端对象...................................................................................64 实验3
基于UDP的图像传输................................................................................................67 上机实践11 数据结构................................................................................................................71 实验1
扫雷小游戏..................................................................................................................71 实验2
排序与查找..................................................................................................................76 实验3
使用TREESET排序......................................................................................................77 上机实践12 JAVA SWING.......................................................................................................79 实验1
JLAYEREDPANE分层窗格............................................................................................79 实验2
使用表格显示日历......................................................................................................80 实验3
多文档界面(MDI)...................................................................................................83 2
上机实践1 初识Java 实验1 一个简单的应用程序
1.答案:
【代码1】:
System.out.println(“你好,很高兴学习Java”);【代码2】:
System.out.println(“We are students”);2.模板代码
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”
} } 实验2 一个简单的Java Applet程序
1.答案:
【代码1】:
g.drawString(“这是一个Java Applet 程序”,10,30);【代码2】:
g.drawString(“我改变了字体”,20,50);2.模板代码
FirstApplet.java import java.applet.*;3 import java.awt.*;public class FirstApplet extends Applet { public void paint(Graphics g){ g.setColor(Color.blue);【代码1】//在Java Applet中绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red);g.setFont(new Font(“宋体”,Font.BOLD,36));【代码2】//在Java Applet中绘制一行文字:“我改变了字体” } } 实验3 联合编译
1.答案:
【代码1】:
System.out.println(“你好,只需编译我”);【代码2】:
System.out.println(“I am A”);【代码3】:
System.out.println(“I am B”);【代码4】:
System.out.println(“I am C”);2.模板代码
模板1:Hello.java public class MainClass { public static void main(String args[ ]){ 【代码1】 //命令行窗口输出“你好,只需编译我” A a=new A();a.fA();B b=new B();b.fB();} }
模板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” } }
上机实践2 基本数据类型与控制语句实验1 输出希腊字母表
1.答案:
【代码1】: startPosition=(int)cStart;
【代码2】: endPosition=(int)cEnd;
【代码3】: c=(char)i;
2.模板代码
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
System.out.println(“希腊字母'α'在unicode表中的顺序位置:”+(int)c);
System.out.println(“希腊字母表:”);
for(int i=startPosition;i<=endPosition;i++)
{
char c=' ';
【代码3】
//i做char型转换运算,并将结果赋值给c
System.out.print(“ ”+c);if((i-startPosition+1)%10==0)
System.out.println(“");
}
} } 实验2 回文数
1.答案:
【代码1】: number<=99999&&number>=1 【代码2】: d5=number/10000;【代码3】: d4=number%10000/1000;【代码4】: d3=number%1000/100;【代码5】: d5!=0 【代码6】: d1==d5&&d2==d4 【代码7】: d4!=0
【代码8】: d1==d4&&d2==d3 【代码9】: d3!=0 【代码10】:d1==d3 2.模板代码
Number.java import javax.swing.JOptionPane;public class Number {
public static void main(String args[])
{
int number=0,d5,d4,d3,d2,d1;
String str=JOptionPane.showInputDialog(”输入一个1至99999之间的数“);
number=Integer.parseInt(str);
if(【代码1】)//判断number在1至99999之间的条件
{
【代码2】
//计算number的最高位(万位)d5
【代码3】
//计算number的千位d4
【代码4】
//计算number的百位d3
d2=number%100/10;
d1=number%10;
if(【代码5】)//判断number是5位数的条件
{
System.out.println(number+”是5位数“);
if(【代码6】)//判断number是回文数的条件
{
System.out.println(number+”是回文数“);
}
else
{
System.out.println(number+”不是回文数“);
}
}
else if(【代码7】)//判断number是4位数的条件
{
System.out.println(number+”是4位数“);
if(【代码8】)//判断number是回文数的条件码
{
System.out.println(number+”是回文数“);
}
else
{
System.out.println(number+”不是回文数“);
}
}
else if(【代码9】)//判断number是3位数的条件
{
System.out.println(number+”是3位数“);
if(【代码10】)//判断number是回文数的条件
{
System.out.println(number+”是回文数“);
}
else
{
System.out.println(number+”不是回文数“);
}
}
else if(d2!=0)
{
System.out.println(number+”是2位数“);
if(d1==d2)
{
System.out.println(number+”是回文数“);
}
else
{
System.out.println(number+”不是回文数“);
}
}
else if(d1!=0)
{
System.out.println(number+”是1位数“);
System.out.println(number+”是回文数“);
}
}
else
{
System.out.printf(”n%d不在1至99999之间“,number);
}
} } 实验3 猜数字游戏
1.答案:
【代码1】: yourGuess!=realNumber 【代码2】: yourGuess>realNumber
【代码3】: yourGuess 2.模板代码 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】)//循环条件 { if(【代码2】)//条件代码 { str=JOptionPane.showInputDialog(”猜大了,再输入你的猜测:“); yourGuess=Integer.parseInt(str); } else if(【代码3】)//条件代码 { str=JOptionPane.showInputDialog(”猜小了,再输入你的猜测:“); yourGuess=Integer.parseInt(str); } } System.out.println(”猜对了!“); } } 上机实践3 类与对象 实验1 三角形、梯形和圆形的类封装 1.答案: 【代码1】: sideA=a;sideB=b;sideC=c; 【代码2】: a+b>c&&a+c>b&&c+b>a 【代码3】: boo=true; 【代码4】: boo=false; 【代码5】: if(boo) { length=sideA+sideB+sideC; return length; } else { System.out.println(”不是一个三角形,不能计算周长“); return 0; } 【代码6】: sideA=a;sideB=b;sideC=c;【代码7】: a+b>c&&a+c>b&&c+b>a 【代码8】: boo=true;【代码9】: boo=false;【代码10】: above=a; bottom=b; height=h; 【代码11】: area=(above+bottom)/2*height; return area;【代码12】: radius=r;9 【代码13】: return 3.14*radius*radius;【代码14】: return 3.14*2*radius;【代码15】: circle=new Circle(10);【代码16】: trangle=new Trangle(3,4,5);【代码17】: lader=new Lader(3,4,10);【代码18】: length=circle.getLength();【代码19】: area=circle.getArea();【代码20】: length=trangle.getLength();【代码21】: area=trangle.getArea();【代码22】: area=lader.getArea();【代码23】: trangle.setABC(12,34,1);【代码24】: area=trangle.getArea();【代码25】: length=trangle.getLength(); 2.模板代码 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() { 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】 //方法体 } 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); } } 实验2 实例成员与类成员 1.答案: 【代码1】: float a; 【代码2】: static float b; 【代码3】: this.a=a; 【代码4】: this.b=b;【代码5】: A.b=100; 【代码6】: A.inputB(); 【代码7】: cat.setA(200);【代码8】: cat.setB(400);【代码9】: dog.setA(150);【代码10】:dog.setB(300);【代码11】:cat.inputA();【代码12】:cat.inputB();【代码13】:dog.inputA();【代码14】:dog.inputB();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[]) { 【代码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()。 } } 实验3 使用package语句与import语句 1.答案:无 2.模板代码 SquareEquation.java package tom.jiafei;public class SquareEquation { double a,b,c; double root1,root2; boolean boo; public SquareEquation(double a,double b,double c) { this.a=a; this.b=b; this.c=c; if(a!=0) { boo=true; } else { boo=false; } } public void getRoots() { if(boo) { System.out.println(”是一元2次方程“); double disk=b*b-4*a*c; if(disk>=0) { root1=(-b+Math.sqrt(disk))/(2*a); root2=(-b-Math.sqrt(disk))/(2*a); System.out.printf(”方程的根:%f,%fn“,root1,root2); } else { System.out.printf(”方程没有实根n“); } } else { System.out.println(”不是一元2次方程“); } } public void setCoefficient(double a,double b,double c) { this.a=a; this.b=b; this.c=c; if(a!=0) { boo=true; } else { boo=false; } } } SunRise.java import tom.jiafei.*;class SunRise { public static void main(String args[ ]) { SquareEquation equation=new SquareEquation(4,5,1); equation.getRoots(); equation.setCoefficient(-3,4,5); equation.getRoots(); } } 上机实践4 继承与接口 实验1 继承 1.答案: 【代码1】: public void speakHello() { System.out.println(”你好,吃饭了吗?“); } 【代码2】: public void averageHeight() { height=173; System.out.println(”中国人的平均身高:“+height+”厘米“); } 【代码3】: public void averageWeight() { weight=67.34; System.out.println(”中国人的平均体重:“+weight+”公斤“); } 【代码4】: System.out.println(”坐如钟,站如松,睡如弓“); 【代码5】: public void speakHello() { System.out.println(”How do You do“); } 【代码6】: public void averageHeight() { height=188; System.out.println(”Amerian Average height:“+height+” cm“); } 【代码7】: public void averageWeight() { weight=80.23; System.out.println(”Amerian Average weight:“+weight+” kg“); } 【代码8】: System.out.println(”直拳、钩拳“); 【代码9】: public void speakHello() { System.out.println(”您好“); } 【代码10】: public void averageHeight() { height=16; System.out.println(”北京人的平均身高:“+height+”厘米“); } 【代码11】: public void averageWeight() { weight=6; System.out.println(”北京人的平均体重:“+weight+”公斤“); } 【代码12】: System.out.println(”京剧术语“);2.模板代码 Example.java class People { protected double weight,height;public void speakHello(){ System.out.println(”yayawawa“);} public void averageHeight(){ height=173;System.out.println(”average height:“+height);} public void averageWeight(){ weight=70;System.out.println(”average weight:“+weight);} } class ChinaPeople extends People { 【代码1】 //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的 //汉语信息 【代码2】 //重写public void averageHeight()方法,要求输出类似 //“中国人的平均身高:168.78厘米”这样的汉语信息 【代码3】 //重写public void averageWeight()方法,//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息 public void chinaGongfu(){ 【代码4】//输出中国武术的信息,例如:”坐如钟,站如松,睡如弓“等 } } class AmericanPeople extends People { 【代码5】 //重写public void speakHello()方法,要求输出类似 //“How do you do”这样的英语信息。【代码6】 //重写public void averageHeight()方法 【代码7】 //重写public void averageWeight()方法 public void americanBoxing(){ 【代码8】//输出拳击的信息,例如,“直拳”、“钩拳”等 } } class BeijingPeople extends ChinaPeople { 【代码9】 //重写public void speakHello()方法,要求输出类似“您好”这样的汉语信息 【代码10】 //重写public void averageHeight()方法 【代码11】 //重写public void averageWeight()方法 public void beijingOpera(){ 【代码12】//输出京剧的信息 } } public class Example { public static void main(String args[]){ ChinaPeople chinaPeople=new ChinaPeople();18 AmericanPeople americanPeople=new AmericanPeople();BeijingPeople beijingPeople=new BeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();} } 实验2 上转型对象 1.答案: 【代码1】: public double earnings() { return 50000.456; } 【代码2】: public double earnings() { return 12*2300; } 【代码3】: public double earnings() { return 52*500; } 【代码4】: for(int i=0;i { salaries=salaries+employee[i].earnings(); } 2.模板代码 HardWork.java abstract class Employee { public abstract double earnings();} class YearWorker extends Employee { 【代码1】 //重写earnings()方法 } class MonthWorker extends Employee { 【代码2】 //重写earnings()方法。} class WeekWorker extends Employee { 【代码3】 //重写earnings()方法。} class Company { Employee[] employee; double salaries=0; Company(Employee[] employee) { this.employee=employee; } public double salariesPay() { salaries=0; 【代码4】 //计算salaries。 return salaries; } } public class HardWork { public static void main(String args[]) { Employee[] employee=new Employee[20]; for(int i=0;i { if(i%3==0) employee[i]=new WeekWorker(); else if(i%3==1) employee[i]=new MonthWorker(); else if(i%3==2) employee[i]=new YearWorker(); } Company company=new Company(employee); System.out.println(”公司年工资总额:“+company.salariesPay()); } } 实验3 接口回调 1.答案: 【代码1】: public double computeWeight() { return 45.5; } 【代码2】: public double computeWeight() { return 65.5; } 【代码3】: public double computeWeight() { return 145; } 【代码4】: for(int k=0;k { totalWeights=totalWeights+goods[k].computeWeight(); } 2.模板代码 Road.java interface ComputerWeight { public double computeWeight();} class Television implements ComputerWeight { 【代码1】 //实现computeWeight()方法。} class Computer implements ComputerWeight { 【代码2】 //实现computeWeight()方法。} class WashMachine implements ComputerWeight { 【代码3】 //实现computeWeight()方法。} class Car { ComputerWeight[] goods; double totalWeights=0; Car(ComputerWeight[] goods) { this.goods=goods; } public double getTotalWeights() { totalWeights=0; 【代码4】 //计算totalWeights return totalWeights; } } public class Road { public static void main(String args[]) { ComputerWeight[] goodsOne=new ComputerWeight[50],goodsTwo=new ComputerWeight[22]; for(int i=0;i { if(i%3==0) goodsOne[i]=new Television(); else if(i%3==1) goodsOne[i]=new Computer(); else if(i%3==2) goodsOne[i]=new WashMachine(); } for(int i=0;i { if(i%3==0) goodsTwo[i]=new Television(); else if(i%3==1) goodsTwo[i]=new Computer(); else if(i%3==2) goodsTwo[i]=new WashMachine(); } Car 大货车=new Car(goodsOne); System.out.println(”大货车装载的货物重量:“+大货车.getTotalWeights()); Car 小货车=new Car(goodsTwo); System.out.println(”小货车装载的货物重量:“+小货车.getTotalWeights()); } } 上机实践5 字符串、时间与数字 实验1 String类的常用方法 模板代码 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(”***24“); 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“); } int position=0; String path=”c:javajspA.java“; position=【代码5】 //获取path中最后出现目录分隔符号的位置 System.out.println(”c:javajspA.java中最后出现的位置:“+position); String fileName=【代码6】//获取path中“A.java”子字符串。 System.out.println(”c:javajspA.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]); } } } 实验2 比较日期的大小 模板代码 DateExample 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(”两个日期的年、月、日完全相同“); } 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+”天“); } } 实验3 处理大整数 模板代码 BigintegerExample import java.math.*;class BigIntegerExample { public static void main(String args[]){ BigInteger n1=new BigInteger(”***321987654321“), n2=new BigInteger(”***789123456789“), 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“);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()+”个因子“);} } 上机实践6 组件及事件处理 实验1 算术测试 模板代码 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(”+“))26 { if(answer==numberOne+numberTwo)right=true;else 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);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.givetOperator();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】//创建窗口,其标题为:算术测试 } } 实验2 信号灯 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);} } 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(){ choice=【代码1】 //创建choice 【代码2】 //创建choice添加itemRed 【代码3】 //创建choice添加itemYellow 【代码4】 //创建choice添加itemGreen 【代码5】 //将当前窗口注册为choice的ItemEvent事件监视器 add(choice,BorderLayout.NORTH);try{ Class cs=Class.forName(”SignalCanvas“);signal=(SignalCanvas)cs.newInstance();add(signal,BorderLayout.CENTER);} catch(Exception e){ add(new Label(”您还没有编写SignalCanvas类“),BorderLayout.CENTER);} 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);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 布局与日历 1.答案: 【代码1】: pCenter.setLayout(new GridLayout(7,7));【代码2】: pCenter.add(titleName[i]); 【代码3】: pCenter.add(labelDay[i]); 【代码4】: add(scrollPane,BorderLayout.CENTER);31 【代码5】: add(pNorth,BorderLayout.NORTH); 【代码6】: add(pSouth,BorderLayout.SOUTH); 2.模板代码 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() { 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; 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();33 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++) { 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()34 { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); } } 上机实践7 组件及事件处理2 实验1 方程求根 1.答案: 【代码1】: controlButton.addActionListener(this);;【代码2】: textA.getText() 【代码3】: textB.getText() 【代码4】: textC.getText() 2.模板代码 SquareEquation.java public class SquareEquation { double a,b,c;double root1,root2;public void setA(double a){ this.a=a;} public void setB(double b){ this.b=b;} public void setC(double c){ this.c=c;} public double getRootOne()throws NoRealRootException,NoSquareEquationException { if(a!=0){ double disk=b*b-4*a*c;if(disk>=0){ root1=(-b+Math.sqrt(disk))/(2*a);} else { throw new NoRealRootException(”没有实根“);35 } } else { throw new NoRealRootException(”不是二次方程“);} return root1;} public double getRootTwo()throws NoRealRootException,NoSquareEquationException { if(a!=0){ double disk=b*b-4*a*c;if(disk>=0){ root2=(-b-Math.sqrt(disk))/(2*a);} else { throw new NoRealRootException(”没有实根“);} } else { throw new NoRealRootException(”不是二次方程“);} return root2;} } class NoRealRootException extends Exception { String message;NoRealRootException(String s){ message=s;} public String getMessage(){ return message;} } class NoSquareEquationException extends Exception { String message;NoSquareEquationException(String s){ message=s;} public String getMessage(){ return message;} } EquationFrame.java import java.awt.*;import java.awt.event.*;public class EquationFrame extends Frame implements ActionListener { SquareEquation equation;TextField textA,textB,textC;TextArea showRoots;Button controlButton;public EquationFrame(){ equation=new SquareEquation();textA=new TextField(8);textB=new TextField(8);textC=new TextField(8);showRoots=new TextArea();controlButton=new Button(”确定“);Panel pNorth=new Panel();pNorth.add(new Label(”二次项系数:“));pNorth.add(textA);pNorth.add(new Label(”一次项系数:“));pNorth.add(textB);pNorth.add(new Label(”常数项系数:“));pNorth.add(textC);pNorth.add(controlButton);【代码1】 //当前窗口作为controlButton的ActionEvent事件的监视器 add(pNorth,BorderLayout.NORTH);add(showRoots,BorderLayout.CENTER);setBounds(100,100,630,160);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ try{ double a=Double.parseDouble(【代码2】);//textA调用方法获取其中的文本 double b=Double.parseDouble(【代码3】);//textB调用方法获取其中的文本 double c=Double.parseDouble(【代码4】);// textC调用方法获取其中的文本 equation.setA(a);equation.setB(b);equation.setC(c);textA.setText(”“+a);37 textB.setText(”“+b);textC.setText(”“+c);showRoots.append(”n 根:“+equation.getRootOne());showRoots.append(” 根:“+equation.getRootTwo());} catch(Exception ex){ showRoots.append(”n“+ex+”n“);} } } EquationMainClass.java public class EquationMainClass { public static void main(String args[]){ EquationFrame frame=new EquationFrame();} } 实验2 字体对话框 1.答案: 【代码1】: setModal(true); 【代码2】: setVisible(false); 【代码3】: setVisible(false); 【代码4】: new FontDialog(this);【代码5】: setVisible(true);【代码6】: dialog.setTitle(”字体对话框“); 2.模板代码 FontFamilyNames.java import java.awt.GraphicsEnvironment;public class FontFamilyNames { String fontName[];public String [] getFontName(){ GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();fontName=ge.getAvailableFontFamilyNames();return fontName;} } FontDialog.java import java.awt.event.*;import java.awt.*;import javax.swing.JLabel; public class FontDialog extends Dialog implements ItemListener,ActionListener { FontFamilyNames fontFamilyNames;int fontSize=38;String fontName;Choice fontNameList;JLabel label;Font font;Button yes,cancel;static int YES=1,NO=0;int state=-1;FontDialog(Frame f){ super(f);fontFamilyNames=new FontFamilyNames();【代码1】 //对话框设置为有模式 yes=new Button(”Yes“);cancel=new Button(”cancel“);yes.addActionListener(this);cancel.addActionListener(this);label=new JLabel(”hello,奥运“,JLabel.CENTER);fontNameList=new Choice();String name[]=fontFamilyNames.getFontName();for(int k=0;k label.setFont(font);label.repaint();validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==yes){ state=YES;【代码2】 //对话框设置为不可见 } else if(e.getSource()==cancel){ state=NO;【代码3】 //对话框设置为不可见 } } public int getState(){ return state;} public Font getFont(){ return font;} } FrameHaveDialog.java import java.awt.event.*;import java.awt.*;import javax.swing.JTextArea;public class FrameHaveDialog extends Frame implements ActionListener { JTextArea text;Button buttonFont;FrameHaveDialog(){ buttonFont=new Button(”设置字体“);text=new JTextArea(”Java 2实用教程(第三版)“);buttonFont.addActionListener(this);add(buttonFont,BorderLayout.NORTH);add(text);setBounds(60,60,300,300);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} 40 public void actionPerformed(ActionEvent e){ if(e.getSource()==buttonFont){ FontDialog dialog=【代码4】 //创建对话框 【代码5】 //对话框设置为可见 【代码6】 //对话框设置设置标题为“字体对话框” if(dialog.getState()==FontDialog.YES){ text.setFont(dialog.getFont());text.repaint();} if(dialog.getState()==FontDialog.NO){ text.repaint();} } } } FontDialogMainClass.java public class FontDialogMainClass { public static void main(String args[]){ new FrameHaveDialog();} } 实验3 英语单词拼写训练 1.答案: 【代码1】: addFocusListener(this); 【代码2】: addMouseListener(this); 【代码3】: label[k].addKeyListener(this); 【代码4】: e.getKeyCode()==KeyEvent.VK_LEFT 【代码5】: e.getKeyCode()==KeyEvent.VK_RIGHT 2.模板代码 RondomString.java public class RondomString { String str=”“;public String getRondomString(String s){ StringBuffer strBuffer=new StringBuffer(s);int m=strBuffer.length();for(int k=0;k strBuffer=strBuffer.deleteCharAt(index);} return str;} } LetterLabel.java import java.awt.*;import java.awt.event.*;public class LetterLabel extends Button implements FocusListener,MouseListener { LetterLabel(){ 【代码1】 //将当前对象注册为自身的焦点视器 【代码2】 //将当前对象注册为自身的标监视器 setBackground(Color.cyan);setFont(new Font(”“,Font.BOLD,30));} public static LetterLabel[] getLetterLabel(int n){ LetterLabel a[]=new LetterLabel[n];for(int k=0;k import java.awt.*;import java.awt.event.*;import javax.swing.Box; public class SpellingWordFrame extends Frame implements KeyListener,ActionListener { TextField inputWord;Button button;LetterLabel label[];Panel northP,centerP;Box wordBox;String hintMessage=”用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词“;Label messaageLabel=new Label(hintMessage);String word=”“;SpellingWordFrame(){ inputWord=new TextField(12);button=new Button(”确定“);button.addActionListener(this);inputWord.addActionListener(this);northP=new Panel();northP.add(new Label(”输入一个英文单词:“));northP.add(inputWord);northP.add(button);centerP=new Panel();wordBox=Box.createHorizontalBox();centerP.add(wordBox);add(northP,BorderLayout.NORTH);add(centerP,BorderLayout.CENTER);add(messaageLabel,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ word=inputWord.getText();int n=word.length();RondomString rondom=new RondomString();String randomWord=rondom.getRondomString(word);wordBox.removeAll();messaageLabel.setText(hintMessage);if(n>0){ label=LetterLabel.getLetterLabel(n);for(int k=0;k { 【代码3】 //将当前窗口注册为label[k]的键盘监视器 label[k].setText(”“+randomWord.charAt(k));wordBox.add(label[k]);} validate();inputWord.setText(null);label[0].requestFocus();} } public void keyPressed(KeyEvent e){ LetterLabel sourceLabel=(LetterLabel)e.getSource();int index=-1;if(【代码4】)//判断按下的是否是←键){ for(int k=0;k { String success=”“;for(int k=0;k WordMainClass.java public class WordMainClass { public static void main(String args[]){ new SpellingWordFrame();} } 上机实践8 多线程 实验1 汉字打字练习 1.答案: 【代码1】: sleep(6000); 【代码2】: WordThread giveWord; 【代码3】: giveWord=new WordThread(wordLabel); 【代码4】: giveWord.isAlive() 【代码5】: giveWord.start(); 2.模板代码 WordThread.java import java.awt.*;public class WordThread extends Thread { char word;int k=19968;45 Label com;WordThread(Label com){ this.com=com;} public void run(){ k=19968;while(true){ word=(char)k;com.setText(”“+word);try{ 【代码1】//调用sleep方法使得线程中断6000豪秒 } catch(InterruptedException e){} k++;if(k>=29968)k=19968;} } } ThreadFrame.java import java.awt.*;import java.awt.event.*;public class ThreadFrame extends Frame implements ActionListener { Label wordLabel;Button button;TextField inputText,scoreText;【代码2】//用WordThread声明一个giveWord对象 int score=0;ThreadFrame(){ wordLabel=new Label(” “,Label.CENTER);wordLabel.setFont(new Font(”“,Font.BOLD,72));button=new Button(”开始“);inputText=new TextField(3);scoreText=new TextField(5);scoreText.setEditable(false);【代码3】//创建giveWord,将wordLabel传递给WordThread构造方法的参数 button.addActionListener(this);inputText.addActionListener(this);add(button,BorderLayout.NORTH);add(wordLabel,BorderLayout.CENTER);Panel southP=new Panel();southP.add(new Label(”输入标签所显示的汉字后回车:“));southP.add(inputText);southP.add(scoreText); add(southP,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ if(!(【代码4】))//giveWord调用方法isAlive(){ giveWord=new WordThread(wordLabel);} try { 【代码5】//giveWord调用方法start()} catch(Exception exe){} } else if(e.getSource()==inputText){ if(inputText.getText().equals(wordLabel.getText())){ score++;} scoreText.setText(”得分:"+score);inputText.setText(null);} } } WordThread.java public class ThreadWordMainClass { public static void main(String args[]){ new ThreadFrame();} 实验2 旋转的行星 1.答案: 【代码1】: Thread moon; 【代码2】: thread=new Thread(this); 【代码3】: Thread.sleep(10); 【代码4】: Thread rotate;【代码5】: rotate.start(); 2.模板代码 Mycanvas.java import java.awt.*;public class Mycanvas extends Canvas { int r;Color c;public void setColor(Color c){ this.c=c;} public void setR(int r){ this.r=r;} public void paint(Graphics g){ g.setColor(c);g.fillOval(0,0,2*r,2*r);} public int getR(){ return r;} } Planet.java import java.awt.*;public class Planet extends Panel implements Runnable { 【代码1】 //用Thread类声明一个moon对象 Mycanvas yellowBall;double pointX[]=new double[360], pointY[]=new double[360];//用来表示画布左上角端点坐标的数组 int w=100,h=100;int radius=30;Planet(){ setSize(w,h);setLayout(null);yellowBall=new Mycanvas();yellowBall.setColor(Color.yellow);add(yellowBall);yellowBall.setSize(12,12);yellowBall.setR(12/2);pointX[0]=0;48 pointY[0]=-radius;double angle=1*Math.PI/180;//刻度为1度 for(int i=0;i<359;i++)//计算出数组中各个元素的值 { pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i];pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle); } for(int i=0;i<360;i++){ pointX[i]=pointX[i]+w/2;//坐标平移 pointY[i]=pointY[i]+h/2;} yellowBall.setLocation((int)pointX[0]-yellowBall.getR(),(int)pointY[0]-yellowBall.getR());【代码2】 //创建 moon线程,当前面板做为该线程的目标对象 } public void start(){ try{ moon.start();} catch(Exception exe){} } public void paint(Graphics g){ g.setColor(Color.blue);g.fillOval(w/2-9,h/2-9,18,18);} public void run(){ int i=0;while(true){ i=(i+1)%360;yellowBall.setLocation((int)pointX[i]-yellowBall.getR(),(int)pointY[i]-yellowBall.getR());try{ 【代码3】 // Thread类调用类方法sleep使得线程中断10豪秒 } catch(InterruptedException e){} } } } HaveThreadFrame.java import java.awt.*;import java.awt.event.*;public class HaveThreadFrame extends Frame implements Runnable { 【代码4】 //用Thread类声明一个rotate对象 Planet earth;double pointX[]=new double[360], pointY[]=new double[360];int width,height; int radius=120;HaveThreadFrame(){ rotate=new Thread(this);earth=new Planet();setBounds(0,0,360,400);width=getBounds().width;height=getBounds().height;pointX[0]=0;pointY[0]=-radius;double angle=1*Math.PI/180;for(int i=0;i<359;i++){ pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i];pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle);} for(int i=0;i<360;i++){ pointX[i]=pointX[i]+width/2;pointY[i]=pointY[i]+height/2;} setLayout(null);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });add(earth);earth.setLocation((int)pointX[0]-earth.getSize().width/2,(int)pointY[0]-earth.getSize().height/2);earth.start();【代码5】 //用rotate调用start方法 } public void run(){ int i=0;while(true){ i=(i+1)%360;earth.setLocation((int)pointX[i]-earth.getSize().width/2,(int)pointY[i]-earth.getSize().height/2);try{ Thread.sleep(100);} catch(InterruptedException e){} } } ...《Java程序设计》课程实验指导书 合肥学院计算机系 实验一 Java开发环境的安装与配置,熟悉Java程序 结构 一、实验目的: 1.掌握JDK的安装步骤。 2.理解环境变量PATH, CLASSPATH的作用,以及它们的设置方法。3.熟悉Editplus 或Eclipse(或TextPad,JCreator)编辑环境,编写简单的Application程序和Applet程序,并编译和执行。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序和Applet程序(能输出一条简单的问候信息); 三、实验要求: 1.能正确地安装JDK 2.熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3.调试程序、编译,运行后得到正确的结果 4.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。 四、实验步骤: 1.从http://java.sun.com 上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译和执行。3.在Eclipse(或JCreator,Textpad)环境下编写一个HelloWorld.java程序,(1)在主方法static public void main(String[ ] args)中调用System.out.println()方法,使程序输出一条问候信息; (2)编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe和java.exe编译和执行程序) 4.在Eclipse(或JCreator,Textpad)环境下编写一个HelloWorldApplet.java程序。 (1)在public void paint(Graphics g)方法中调用g.drawString()方法,使 程序输出一条问候信息; (2)编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe编译和浏览器解释执行Applet程序) 实验二 Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 二、实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。(闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.编写Java Appet 程序打印 “水仙花” 数(它的个、十、百位数字的立方的和等于该数本身,如:153=1^3+5^3+3^3)3.编写Java Application程序,分别用do-while和for循环计算1+1/2!+1/3!+1/4!...的前20项和 三、实验要求: 1.正确使用Java语言的选择语句,循环语句; 2.调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[ ] args)方法中加入实现要求功能的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第二题)编写Java Applet, 在public void paint(Graphics g)方法中加入实现要求功能的代码, 主要步骤是:从100到1000循环,判断每个数是否符合水仙花数的特点,是则输出之。3.编译运行程序,观察输出结果是否正确。 五、自做实验 1.输出100以内的所有素数。提示: 逐个判断小于a的每个正整数x,第二重循环针对x,判断其是否是质数。 2.将所输入之正整数,以二、八、十六进制表示出来。提示: 可写三个方法分别计算输出二、八、十六进制表示。 实验三 类和对象 一、实验目的: 掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现; 掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的用法; 掌握类变量与实例变量,以及类方法与实例方法的区别。 三、实验内容: 1.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),专业(specialty)和封装name属性的方法:setName(),getName(),getspecialty()编写Application,创建一个学生对象,设置name和age属性值,然后调用一个方法(此方法将对象作为参数传递,在方法中打印出学生的名字name和年龄age)。(学生类仅包含静态成员变量和方法。)2.定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标 show(),构造函数有两个参数分别给x,y赋值,在main方法中构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的中点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。 3.定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j)显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2)求两个复数的差的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex subComp(Complex C1,Complex C2)求两个复数的乘积的方法:(参数是两个复数类对象,返回值是复数类对象,新复数实部=两复数实部乘积-两复数虚部乘积,新复数虚部=两复数实部与虚部 交叉乘积之和,)public Complex multiComp(Complex C1,Complex C2)比较两个复数是否相等的方法(参数是两个复数类对象,返回值是boolean类型)public boolean equalComp(Complex C1,Complex C2)在Application中测试该类的方法,实部x和虚部y可由main方法参数提供输入。 三、实验要求: 1.正确地定义类、方法和属性;2.学会方法的参数传递和返回值的用法; 3.熟练使用类及其成员修饰符 4.使用构造函数创建类的对象; 5.类变量与实例变量,以及类方法与实例方法的使用 6.程序应包括各个被调用方法的执行结果的显示。 7.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义一个学生类(Student)及它的属性和方法;定义主类和main(),在main()方法中创建学生对象,并通过对象调用它的方法setName(),getName(),输出学生的名字name和年龄age。 2.(第2题)定义类Point及它的属性、方法和构造函数,定义主类和main(),在main()方法中创建两个坐标对象,,并通过对象调用getMiddle方法后得到一个新的点坐标,调用show()显示该对象的坐标值。3.(第3题)定义一个复数(z=x+iy)类Complex,及它的属性、方法和构造函数;定义主类和main()方法,在main()方法中创建两个复数类Complex对象,并通过复数类对象调用它们的属性和方法,输出方法执行结果。 五、自做实验 1.构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 2.编写实现:有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0 3.编写实现: 构造函数为 Triangle(int xx,int yy,int aa)参数分别为x,y,a赋值 在main方法中构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。(提示:求高的方法 h=y*Math.sin(a))注意:构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。 实验四 java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; 掌握包和接口的定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验内容: 1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求: (1)Point2D有两个整型成员变量x, y(分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。 (2)Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。 (3)Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z(分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。 (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象p3d1,p3d2,打印出他们之间的距离。 2.定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。 定义接口DiagArea,其中包含方法double getDiagonal()求对角线长, double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成 员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。 三、实验要求: 1.能实现类的继承关系; 2.用多种方法创建各个类的对象; 3.程序应包括各个被调用方法的执行结果的显示。 4.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义Point2D,及定义它的属性和方法; 定义子类Point3D,及定义它的属性和方法;在Point3D中的主函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义主类、主方法,在main方法中构造3个对象,调用showArea方法;定义接口DiagArea,其中包含方法double getDiagonal(),在主main方法中输出方法执行结果。 六、自做作实验 1.定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。 2创建一个接口Shape,其中有抽象方法area,类Circle、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle 10 对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。 3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资 2)定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 3)创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。提示: 1)定义两个接口,分别在其中申明两个方法。2)定义主类Graduate,实现这两个接口。3)定义主类的成员变量,和构造方法。 4)给出四个接口方法的实现。5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。 6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法。4.书后练习 实验五 Java的异常处理 一、实验目的: 理解 java 语言中独特的异常处理机制;掌握异常处理方法;正确地使用捕获异常和声明抛弃异常的两种异常处理的方法;了解自定义异常类的使用;理解抛出异常和声明抛出异常的区别与联系; 二、实验内容: 1. 从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。 2.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。 3.自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。 三、实验要求: 1.通过实验掌握捕获异常和声明抛弃异常的两种异常处理的方法; 2.程序必须能够捕获Integer.parseInt()产生的异常并作相应的处理; 3.程序必须能够将处理的相应的信息输出出来; 4.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)使用try„..catch„.finally语句对Integer.parseInt()产生的异常进行捕获处理;2.(第2题)定义方法void sanjiao(int a,int b,int c)中,不符合条件则抛出异常(if a+b<=c(或a+c<=b,b+c<=a)then throw new IllegalArgumentException(),),再定义main方法,调用此方法,用try„..catch„.finally语句并捕获异常;3.(第3题)定义三角形类及相应的方法, 在定义的方法中对不符合条件则抛出异常(如上题),再定义main方法,对正确的数据输出正确信息,否则捕获异常; 五、自做实验 1.参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。[提示:用错误数据测试,即可得到异常类名,运行时主方法参数输入 abc 测试] public class StringIndexOutOf{ public static void main(String args[]){ System.out.println(“字符串索引越界异常”);String str=args[0];System.out.println(“第四个字符为 ”+str.charAt(3));int aa=Integer.parseInt(args[0]); System.out.println(“ 平 方为 ”+aa*aa);} } 实验六 Java数组、字符串及常用类应用 一、实验目的: 掌握数组的定义和使用方法;熟悉数组的排序、查找等算法。掌握字符串的使用方法。 二、实验内容: 1.编写Application程序, 从命令行参数输入10个整数并保存在数组中,求数组中最大、最小、数据的和、平均值。 2.从命令行参数一日期,如“2005-5-6”,计算与今日之间的天数间隔。3.将命令行第一个参数每个字符放入一字符数组,然后逆序输出 4.编写Application程序,接受用户输入一段英文文字后,输出其中的字符数、单词数和句子数(设句子以“?”、“!”、“.”结束)。5.打印杨辉三角的前10层。 6.编写Applet程序,使用 *画一条正弦曲线(提示:y=a* sin(x),坐标要取整) 三、实验要求: 1.熟练对象数组及创建初始化和未初始化的数组的方法;2.熟悉从命令行参数的使用;3.熟悉String 和StringBUFFER的使用方法 4.熟悉常用类库的使用;5.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1(第1题).从命令行输入10个数到数组,用循环语句分别求最大、最小、数据的和、平均值。 2.(第2题)利用String类的各种方法,分别判断字符是否为“?”、“!”、“.”,用3个计数器分别计数。 3(第3题)将命令行第一个参数字符串中的每个字符作为数组元素放入一字符数组,再循环语句逆序数组元素。 4.(第4题)定义一个二维数组,第一维的长度为所打印杨辉三角的层数(即 10),第二维为每一层的数据个数(也就是其所在的层数)。(第5题)利用Math类中sin函数,在Paint()方法中用Graphics类drawString()画一条正弦曲线.五、自做实验 1.求Fibonacci序列的前n项,要求: 在main方法中定义一数组,数组的长度n为一final定义的常量,使用一单独方法,无返回值,参数为一数组,在方法中给数组赋予序列的值,在main方法中调用该方法,然后打印结果数组的内容 2.声明一个矩阵类Matrix,成员变量是一个二维数组,设数组元素类型为int,请设计方法:(1)构造方法: Matrix()//构造一个10X10个元素的矩阵,没有数据 Matrix(int n,int m)//构造一个nXm个元素的矩阵,数据由随机数产生 Matrix(int table[][])//以一个整型的二维数组构造一个矩阵 要求使用 this(2)实例方法: public void output()//输出Matrix类中数组的元素值 public void transpose()//输出一个矩阵的转置矩阵 2.随机数求法: Math.random()返回0-1的小数,由上题中的Matrix类派生出正方形Square类,在构造方法中调用父类的构造方法(使用super)。 3.编写一个Java程序,完成以下功能: (1)声明一个名为s的String对象,并使它的内容是“My name is Carrol”;(2)打印整个字符串;(3)打印字符串的长度;(4)打印字符串的第一个字符;(5)打印最后一个字符;(6)打印字符串的第一个单词。 *4.编写一个程序,用散列表实现学生成绩单的存储和查询,并将若干个查 15 询结果存放到一个向量中,通过循环将向量对象内容逐个输出。*5.从命令行读入一浮点数值,将其转化为中文金额的大写方式,如123.45,转化为:壹佰贰拾叁元肆角伍分,中间有多个0只要一个零。*6.利用Vector对象改写上面的程序,输入元素个数由用户自由确定。 实验七 图形用户界面与事件处理机制 (一)一、实验目的: 掌握Java图形组件和布局管理器的使用; 掌握使用Java事件处理机制的使用。 掌握图形界面的各种控件的使用,如:标签、文本框、按钮、复选框、列表框、窗框等。 二、实验内容: 1.编写Application程序,在Frame中加入2个按钮(Button)和1个标签(Label),单击两个按钮,显示按钮的标签于Label。 2.在Applet中加入1个文本框,1个文本区,每次在文本框中输入文本,回车后将文本添加到文本区的最后一行。 3.在Applet中加入2个复选框,显示标题为“学习”和“玩耍”,根据选择的情况,分别显示“玩耍”、“学习”、“劳逸结合”。 4.在Applet中加入1个滚 动列表框List、1个下拉列表框Choice和1个按钮,点击按钮将List中的项目移到Choice组件中,5.编写Application程序,在Frame中加入80个按钮,分20行4列,用GridLayout布局方式,按钮背景为黄色(Color.yellow),按钮文字颜色为红色(Color.red)。 6.设计一个简单计算器,如下图所示。在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将结果填入到“结果”标签右侧的文本框中。 三、实验要求: 1.采用布局管理器进行界面的布局; 2.学会对不同的事件用相应的事件处理器; 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.运用一种或多种布局管理器,绘制出一个简单的计算器; 2.为按钮注册事件监听器,使其点击按钮,并在显示区域同步显示当前输入或运算结果; 3.编译运行程序,检查计算器的正确性; 五、自做实验 1.学生可以视个人情况完成更复杂更完善的计算器功能,通过多种布局管理方法实现更美观的界面布局。 2.编写Applet程序,在控制按钮程序中,实现播放音乐,显示图片等操作。3.编写Java Applet程序,使它在浏览器中通过响应功能按钮的点击事件绘制各种简单的几何图形(矩形、圆形、扇形、多边形和他们的填充效果),并且能够通过接收传递参数控制图形的绘制。 4.在Applet中做2个按钮,点击它们,分别画一个填充的蓝矩形和粉红色圆,位置随机,并统计每个按钮点击的次数 实验七 图形用户界面与事件处理机制 (二)一、实验目的: 掌握菜单、弹出式菜单设计。会处理事件以及设置输入对话框。 了解对文本域JTextArea中字符进行复制和粘贴的操作。 二、实验内容: 1.在窗口中建立菜单和弹出式菜单,”文件”中有”打开”项目,点击后弹出文件对话框,在界面中的1个文本框中显示打开的文件名。 *2.设计一个JAVA程序模仿记事本(NotePad)的部分功能,界面如下图。 三、实验要求: 1.学会建立菜单和弹出式菜单; 2.学会文件对话框的使用;对不同的事件用相应的事件处理器; 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)从打开文件对话框中获取文件名,将文件名放入文本框。2.(第2题)新建文件时,文本域为空;打开文件和保存文件时要给出输入对话框,输入相应文件名后进行操作;选择退出菜单将退出整个程序。 再对文本域中选中的字符能够进行复制和粘贴操作。3.编译运行以上程序 五、自做实验: 1.利用所学的Java语言知识,完成一个实现秒表功能的Applet程序。它的GUI界面如下所示: 利用所学的Java语言知识,完成一个实现秒表功能的Applet程序。它的GUI界面如下所示: 要求该程序能够完成以下功能: (1)在界面上方的文本框中,按照“小时:分钟:秒”的顺序实时显示系统时间; (2)当按下界面中间的“Current Time:”按钮时,当前系统时间能够在界面下方的文本框中显示出来。 提示:可以通过调用java.util.Data类的方法,获得系统时间。Data类的接口如下所示,public class Date { // 返回当前系统时间的小时值 public String getHours(){ „} // 返回当前系统时间的分钟值 public String getMintues(){ „ } // 返回当前系统时间的秒钟值 public String getSeconds(){ „} „ } 2.编写一个计算器程序,只有加减乘除功能,当作Applet运行。 3.编写一个Applet程序:画图 要求:界面上有2个按钮,一个为标签为“椭圆”,另一个为“矩形”,点击后分别画红色的椭圆和蓝色的矩形,其宽度为100、高度为60,左上角顶点坐标为(50,50),试写出完整程序,并且要写出其对应的HTML文件代码。 实验八 Applet类及应用 一、实验目的: 掌握applet的程序结构和运行方式;掌握从html文档向Java Applet传递参数的方法;了解applet程序的生命周期;掌握在Applet中对字体、颜色、播放声音、显示图像和动画控制方法; 二、实验内容: 1.编写Applet程序,改变applet窗口大小,使其最大化、最小化,查看init()、start()、paint()、和destroy()方法的执行情况(执行顺序和执行次数)。2. 编写Applet显示字符串,显示字符串及其显示位置,字体、字体大小和颜色通过HTML文件中的参数来传递。 3.编写Applet(大小140*60),其背景色为蓝色,画一个长方形(其填充色为pink,各边离边小于10像素)和一个在填充的长方形中左右移动的小球(半径15)。 4.实现一个Applet,显示一幅图片。不停地运行一个动画。 三、实验要求: 1.必须编写成Java Applet程序; 2.能够通过传递参数控制一种或者几种图形的绘制; 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)在paint()方法中,绘制init()、start()、paint()、和destroy()方法的执行次数的直方图。 2.(第2题)在HTML文件中添加参数传递的代码: „„ 在init()方法中,调用getParameter()获取由HTML传递的参数,再按照要求,在paint()方法中调用Graphics类中drawString()函数显示 字符串。 3.(第3题)在paint()方法中调用Graphics类中drawString()函数时,X坐标定义成变量(10〈=X〈=120),4.(第4题)在init()方法中,根据指定的位置获取一系列图片类对象放入数组,再循环显示系列图片就形成动画。5.运行、检查和调试 以上各程序。 五、自做实验 1.编写Applet,访问并显示指定URL地址处的图像和声音资源。2.编写Applet,访问并显示指定URL地址处的一组图像构成的动画。3.编写Applet,接收用户输入的网页地址,并与程序中事先保存的地址相比较,若存在则打开网页,并在新打开的浏览器窗口显示*编写一个Applet程序,显示一个圆心在Applet的中心,半径从0到100像素不断变大的绿色球的动画。 4.在Applet中画矩形,要求矩形做上角点坐标(20,20),高度为400*200,上下左右边设为蓝色、矩形填充色为绿色,并在居中的位置写上文字“面向对象程序设计”,字体为楷体_gb2312,大小自定。 5.自定义椭圆(或圆)的方法,画一组椭圆(最大半径200),以圆心处为参考点,半径依次增加2个像素,圆周的颜色随机。 6.给定数组data[]={1,2,3,4}分别画出圆饼图、条形图(宽随意给定,高代表所占百分比),颜色任意。 7.找一幅图像,显示在Applet中,要求按原图大小显示,再放大或缩小一倍显示,或者放大显示右下部的1/4块 实验九 Java多线程 一、实验目的: 熟悉利用Thread类建立多线程方法。熟悉利用Thread接口建立多线程方法。 二、实验内容: 1.阅读下列程序,分析并上机检验其功能。class DelayThread exends Thread{ private static int count=0;private int no;private int delay;public DelayThread(){ count++;no=count;} public void run(){ try{ for(int i=0;i<10;i++){ delay=(int)(Math.random()*5000);sleep(delay);System.out.println(“Thread ”+no+” with a delay ”+delay);} }catch(InterruptedException e){}}} public class MyThread{ public static void main(String args[]){ DelayThread thread1=new DelayThread();DelayThread thread2=new DelayThread();thread1.start();thread2.start();try{ Thread.sleep(1000);}catch(InterruptedException e){ System.out.println(“Thread wrong”);}}} 2.讲上列程序利用Runnable接口改写,并上机检验。 3.利用多线程 编写一个模拟时钟(AWT程序、Runnable接口),有时分秒 针 编写一个应用程序,创建三个线程分别显示各自的时间。 三、实验要求: 1.通过实验掌握Thread、Runnable使用方法; 2.程序必须能够实现多线程; 3.程序必须能够完成题目要求; 4.写出实验报告。 四、实验步骤: 首先分析程序功能,再通过上机运行验证自己的分析,从而掌握通过Thread类建立多线程的方法。 通过将扩展Thread类建立多线程的方法改为利用Runnable接口的方法,掌握通过Runnable接口建立多线程的方法。 四、自做实验 课本:P262 12,13,14 25 实验十 输入输出流 一、实验目的: 熟悉Java的文件读写机制,练习输入输出流的使用。 二、实验内容: 1、键盘输入10个整数,从小到大进行排序。 2、接收键盘输入的字符串,用FileInputStream类将字符串写入文件,用FileOutputStream类读出文件内容显示在屏幕上。 3、将一个文本文件的内容按行读出,每读出一行就顺序加上行号,并写入到另一个文件中。 三、实验要求: 1.通过实验掌握文件输入输出流的使用方法; 2.程序必须能够从键盘接收字符串并保存在文件中; 3.程序必须能够读出文件内容显示在屏幕上; 4.写出实验报告。 四、实验步骤: 1.(第1题)接收键盘输入字符串,再转化整数; 2.(第2、3题)编写主方法main(),其中实现接收键盘输入功能、文件操作功能和文件内容输出功能; 3.调试运行程序,观察输出结果。 五、自做实验 课本:P300,7、10 实验十一 Java网络编程 一、实验目的: 1、熟悉掌握Java的相对高级别(简单的)网络通讯 2、熟悉掌握URL类访问Web页面的操作流程 3、学会JAVA的Socket类和ServerSocket类的使用 二、实验内容: 1、编程实现同一Web页面两个Applet之间的通讯 2、编程实现显示URL中的Html文件 * 3、参照例程编写一个简单的聊天室程序(P411,2) 三、实验要求: 1.通过实验掌握的URL类、Socket类和ServerSocket类的使用方法; 2.程序必须完成题目要求的功能; 3.写出实验报告。 四、实验步骤: 1.(第1题)参照例程两个Applet分别加上按钮,互相控制对方的线程 2.(第2题)通过URL类中方法,实现通讯,获取Html文件 3.(第3题)参照例程增加多客户端,实现聊天室 4.调试运行程序,观察输出结果。 五、自做实验 P411,8 实验十二 Java与数据库连接 一、实验目的: 熟悉SQL命令集。 学会编写加载数据库驱动和连接数据库的JAVA程序。应用Java.sql包中的类和接口编写操作数据库的应用程序。 二、实验内容: 编程实现如下功能:在数据库中建立一个表,表名为学生,其结构为:编号、姓名、性别、年龄、JAVA语言、数据结构、微机原理、总分。在表中输入多条记录。将表每条记录按照总分大到小的顺序显示在屏幕上。查找并显示姓名为“张三”的记录。(要求图形界面) 三、实验要求: 1.通过实验掌握SQL命令的使用; 2.使用J2SDK中提供的JDBC-ODBC桥连接数据库; 3.使用的数据库系统不受限制,比如可以用Access。4.调试运行程序,观察输出结果。5.写出实验报告。 四、实验步骤: 1、首先设计一个图形界面 2、首先建立一个数据库,在此基础上通过编程实现一下功能: 在数据库中建立一个表,表名为职工,其结构为:编号、姓名、性别、年龄、JAVA语言、数据结构、微机原理、总分。1)在表中输入多条记录。 2)将每条记录按照总分大到小的顺序显示在屏幕上。 3)查找并显示姓名为“张三”的记录 五、自做实验 课本:P411,2 实验十三 实现C/S应用 一、实验目的: 熟悉综合运用图形用户界面与事件处理机制、Java的文件读写机制、输入输出流的使用、多线程、Java的异常处理、Java网络编程知识,编写一个综合程序 二、实验内容: 利用Socket编程实现C/S应用。其中,Client端为GUI程序,用于提供界面输入两个数,并有1个“发送”按钮,另外还有一个 TextField用于显示传来的计算结果;Server端用于监听连接请求、计算发送过来的两数的和、送回数据结果。 三、实验要求: 1.有良好的图形用户界面; 2.多个用户能同时操作; 3.要有异常处理机制 4.调试运行程序,观察输出结果。5.写出实验报告。 四、实验步骤: 1、编写服务器端程序 2、客户端首先设计一个图形界面 3、实现客户端程序 五、自做实验 在此程序的基础上,增加相应的功能。 学 生 实 验 报 告 册 课程名称: 学生学号: 所属院部: (理工类) 专业班级: 学生姓名: 指导教师: ——20 学年 第 学期 金陵科技学院教务处制 实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。 金陵科技学院实验报告 实验项目名称: 面向对象编程实验 实验学时: 8 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验1 面向对象编程实验 一、实验目的和要求 (1)理解Java概念、掌握JDK环境配置(2)熟悉Java开发过程 (3)掌握Java面向对象编程基础:封装、继承、多态(4)掌握Java接口编程,理解开发模式 二、实验仪器和设备 奔腾以上个人计算机,windows操作系统。 配置好JDK环境,安装集成开发环境(Eclipse) 三、实验内容与过程 1、JDK环境配置 2、面向对象的封装性 范例:设计一个表示学生的类,里面有学生的三项成绩:计算机成绩、数学成绩、英语成绩。要求可以求总分、平均分、最高分、最低分,并且可以输出一个学生的完整信息。代码如下: class Student{ private String name;private int age;private float english;private float computer;private float math;public Student(){} public Student(String n,int a,float e,float c,float m){ this.setName(n); this.setAge(a); this.setEnglish(e); this.setComputer(c); this.setMath(m);} public float sum(){ return english + computer + math;} public float avg(){ return this.sum()/ 3;} public float max(){ float max = computer>math?computer:math; max = max>english?max:english; return max;} public float min(){ float min = computer第二篇:《Java程序设计》课程实验指导书
第三篇:Java程序设计实验2