Java龚永罡 - 答案
更新时间:2024-03-19 00:00:01 阅读量: 综合文库 文档下载
- java培训班推荐度:
- 相关推荐
《Java语言程序设计基础教程》
上机实验指导手册
1
实验一 Java环境演练
【目的】
①安装并配置Java运行开发环境;
②掌握开发Java应用程序的3个步骤:编写源文件、编译源文件和运行应用程序; ③掌握开发Java Applet程序的3个步骤:编写源文件、编译源文件和运行Java Applet程序;
④学习同时编译多个Java源文件。 【内容】
1.一个简单的应用程序
? 实验要求:
编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
? 程序运行效果示例:
程序运行效果如下图所示:
? 程序模板:
Hello.java
public class Hello {
public static void main (String args[ ]) {
【代码1】 //命令行窗口输出\你好,很高兴学习Java\ A a=new A(); a.fA(); } } class A {
void fA() {
【代码2】 //命令行窗口输出\ } }
? 实验后的练习:
1. 编译器怎样提示丢失大括号的错误? 2. 编译器怎样提示语句丢失分号的错误? 3. 编译器怎样提示将System写成system这一错误? 4. 编译器怎样提示将String写成string这一错误?
2.一个简单的Java Applet程序 ? 实验要求:
编写一个简单的Java Applet程序,并在Java Applet中写两行文字:“这是一个Java Applet程序”和“我改变了字体”。
? 程序运行效果示例:
2
程序运行效果如下图所示:
? 程序模板:
FirstApplet.java
import java.applet.*; 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(\宋体\
【代码2】//在Java Applet中绘制一行文字:“我改变了字体” } }
? 实验后的练习:
5. 程序中的主类如果不用public修饰,编译能通过吗? 6. 程序中的主类如果不用public修饰,程序能正确运行吗? 7. 程序将paint方法误写成Paint,编译能通过么? 8. 程序将paint方法误写成Paint,运行时能看到有关的输出信息吗?
3.联合编译
? 实验要求:
编写4个源文件:Hello.java、A.java、B.java和C.java,每个源文件只有一个类,Hello.java是一个应用程序(含有main方法),使用了A、B和C类。将4个源文件保存到同一目录中,例如:C:\\100,然后编译Hello.java。
? 程序运行效果示例:
程序运行效果如下图所示:
? 程序模板:
模板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(); }
3
}
模板2 :A.java
public class A {
void fA() {
【代码2】 //命令行窗口输出\ } }
模板3 :B.java
public class B {
void fB() {
【代码3】 //命令行窗口输出\ } }
模板4 :C.java
public class C {
void fC() {
【代码4】 //命令行窗口输出\ }
}
? 实验后的练习:
9. 将Hello.java编译通过后,不断修改A.java源文件中的代码,比如,在命令
行窗口输出“我是A类”或“我被修改了”。要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序Hello。
10. 如果需要编译某个目录下的全部Java源文件,比如C:\\1000目录,可以使
用如下命令:c:\\1000\\javac *.java
【结果】
将本次上机实验结果按照以上内容依次填写实验目标、过程、结果。
【注意事项】
① 实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。 ② 报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
4
实验二 Java基本数据类型与控制语句
【目的】
① 掌握char型数据和int型数据之间的相互转换,同时了解unicode字符表; ② 掌握使用if…else if多分支语句; ③ 使用if…else分支和while循环语句解决问题。 【内容】
1.输出希腊字母表。
? 实验要求:
编写一个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 System.out.println(\希腊字母\\'α\\'在unicode表中的顺序位置:\ System.out.println(\希腊字母表:\ for(int i=startPosition;i<=endPosition;i++) {
char c='\\0';
【代码3】 //i做char型转换运算,并将结果赋值给c System.out.print(\
if((i-startPosition+1)==0)
System.out.println(\ } } }
? 实验后的练习:
1. 将一个double型数据直接赋值给float型变量,程序编译时提示怎样的错
误?
2. 在应用程序的main方法中增加语句:
float x=0.618;
程序能编译通过么?
3. 在应用程序的main方法中增加语句:
byte y=128;
5
程序能编译通过么?
4. 在应用程序的main方法中增加语句:
int z=(byte)128;
程序输出变量z的值是多少?
2.回文数。
? 实验要求:
编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。
? 程序运行效果示例:
程序运行效果如下图所示:
? 程序模板:
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=number0/10; d1=number;
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位数的条件 {
6
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(\不在1至99999之间\ }
7
} }
? 实验后的练习:
1. 程序运行时,用户从键盘输入2332,程序提示怎样的信息? 2. 程序运行时,用户从键盘输入654321,程序提示怎样的信息? 3. 程序运行时,用户从键盘输入33321,程序提示怎样的信息?
3.猜数字游戏。
? 实验要求:
编写一个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】) //循环条件 {
if(【代码2】) //条件代码 {
str=JOptionPane.showInputDialog(\猜大了,再输入你的猜测:\ yourGuess=Integer.parseInt(str); }
else if(【代码3】) //条件代码 {
str=JOptionPane.showInputDialog(\猜小了,再输入你的猜测:\ yourGuess=Integer.parseInt(str); } }
System.out.println(\猜对了!\ }
8
}
? 实验后的练习:
1. 用“yourGuess>realNumber”替换【代码1】,可以么?
2. 语句:“System.out.println(“猜对了!”);”为何要放在while循环语句之后?放在while语句的循环体中合理吗?
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。
【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
9
实验三 类与对象、继承
【目的】
①使用类来封装对象的属性和功能;
②掌握类变量与实例变量,以及类方法与实例方法的区别; ③掌握使用package和import语句。 ④巩固以下概念:
子类的继承性
子类对象的创建过程 成员变量的继承与隐藏 方法的继承与重写
【内容】
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赋值。 }
10
}
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返回 } }
11
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(\圆的周长:\
【代码19】 // circle调用方法返回面积并赋值给area System.out.println(\圆的面积:\
【代码20】 // trangle调用方法返回周长并赋值给length System.out.println(\三角形的周长:\ 【代码21】 // trangle调用方法返回面积并赋值给area System.out.println(\三角形的面积:\
12
【代码22】 // lader调用方法返回面积并赋值给area System.out.println(\梯形的面积:\
【代码23】 // trangle调用方法设置三个边,要求将三个边修改为12,34,1。 【代码24】 // trangle调用方法返回面积并赋值给area System.out.println(\三角形的面积:\
【代码25】 // trangle调用方法返回周长并赋值给length System.out.println(\三角形的周长:\ } }
? 实验后的练习:
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;
13
}
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()。 } }
? 实验后的练习:
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语句。
? 实验要求:
按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类。掌握一些重要的操作步骤。
? 程序运行效果示例:
14
程序运行效果如下图所示:
? 程序模板:
模板1:
将模板1给出的Java源文件命名为SquareEquation.java,将编译后得到的字节码文件复制到c:\\1000\\tom\\jiafei目录中。 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,%f\\n\ } else {
System.out.printf(\方程没有实根\\n\ }
15
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+\年\月\日和\
+yearTwo+\年\月\相隔\天\ } }
? 实验后的练习:
1. Calendar对象可以将时间设置到年、月、日、时、分、秒。请改进上面的程序,使用户输入的两个日期包括时、分、秒。
2. 根据本程序中的一些知识,编写一个计算利息(按天计算)的程序。从输入对话框输入存款的数目和起止时间。
3.处理大整数。
? 实验要求:
编写一个Java应用程序,计算两个大整数的和、差、积和商,并计算一个大整数的因子个数(因子中不包括1和大整数本身)。
? 程序运行效果示例:
程序运行效果如下图所示:
? 程序模板:
BigintegerExample
import java.math.*; class BigIntegerExample {
public static void main(String args[])
{ BigInteger n1=new BigInteger(\ n2=new BigInteger(\ result=null;
21
result=【代码1】//n1和n2做加法运算
System.out.println(\和:\ result=【代码2】//n1和n2做减法运算
System.out.println(\差:\ result=【代码3】//n1和n2做乘法运算
System.out.println(\积:\ result=【代码4】//n1和n2做除法运算
System.out.println(\商:\ BigInteger m=new BigInteger(\ COUNT=new BigInteger(\ ONE=new BigInteger(\ TWO=new BigInteger(\
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(\ } }
System.out.println(\
System.out.println(m.toString()+\一共有\个因子\ } }
? 实验后的练习:
1. 编写程序,计算大整数的阶乘。
2. 编写程序,计算1+2+3…的前999999999项的和。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
22
实验五 组件与事件处理
【目的】
①学习处理ActionEvent事件;
②学习处理ItemEvent事件和paint方法; ③学习使用布局类。 【内容】
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)
23
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事件监视器
24
【代码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(\ textTwo.setText(\ 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
25
{ public static void main(String args[]) { ComputerFrame frame;
frame=【代码9】//创建窗口,其标题为:算术测试 } }
? 实验后的练习:
1. 给上述程序增加测试乘、除的功能。
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); }
26
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=\红灯\黄灯\绿灯\ 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(\ signal=(SignalCanvas)cs.newInstance(); add(signal,BorderLayout.CENTER); }
catch(Exception e)
{ add(new Label(\您还没有编写SignalCanvas
\ }
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返回被选中的条目
27
类
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(\信号灯\ } }
? 实验后的练习:
1. 改进上述程序,在下拉列表中增加“熄灭所有灯”选项,当选中该项时,画布上绘制一个半径为0,位置是(0,0)的圆。
28
3.布局与日历。
? 实验要求:
编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个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() { 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; }
? 程序模板:
29
if(month==2)
{ if(((year%4==0)&&(year0!=0))||(year@0==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(\ 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(\ 【代码3】//pCenter添加组件labelDay[i]。 }
calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month);
30
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(\日历:\年\月\
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(\日历:\年\月\
31
} }
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() { windowClosing(java.awt.event.WindowEvent e)
{ System.exit(0); } } ); } }
public
void
? 实验后的练习:
1. 请在CalendarFrame类中增加一个TextField文本框,用户可以通过在文本框中输入年份来修改calendar对象的int成员year。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
32
实验六 多线程
【目的】
①掌握使用Thread的子类创建线程; ②学习使用Thread类创建线程; ③学习处理线程同步问题。 【内容】
1.汉字打字练习。
? 实验要求:
编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建1个线程giveWord。线程giveWord每隔2秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。
? 程序运行效果示例:
程序运行效果如下图所示:
? 程序模板:
WordThread.java
import java.awt.*;
public class WordThread extends Thread { char word; int k=19968; Label com;
WordThread(Label com) { this.com=com; }
public void run() { k=19968; while(true) {
word=(char)k; com.setText(\
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
33
{
Label wordLabel; Button button;
TextField inputText,scoreText;
【代码2】//用WordThread声明一个giveWord对象 int score=0; ThreadFrame()
{ wordLabel=new Label(\ wordLabel.setFont(new Font(\ 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){} }
34
else if(e.getSource()==inputText)
{ if(inputText.getText().equals(wordLabel.getText())) { score++; }
scoreText.setText(\得分:\ inputText.setText(null); } } }
WordThread.java
public class ThreadWordMainClass
{ public static void main(String args[]) { new ThreadFrame(); }
? 实验后的练习:
1. 在WordThread类中增加int型的成员time,其初值为6000,将其中的【代码1】更改为线程中断time毫秒。在WordThread类增加public void setTime(int n)方法,使得WordThread线程对象可以调用该方法修改time的值。
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;
35
正在阅读:
Java龚永罡 - 答案03-19
图解Windows - XP远程桌面06-14
〖小升初数学押题〗2018年人教版六年级数学毕业升学模拟试卷-含06-16
四川省卫生厅关于2010年医学重点学科(实验室)及重点专科建设项目申报和动态管理的通知 - 图文12-19
亲情陪伴作文02-04
赶庙会作文450字07-13
蓝蓝水业11-26
英国泰晤士报TIMES(2010-2011)世界大学排名200强05-06
高等教育心理学03-16
医疗组06-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 答案
- 龚永罡
- Java
- NCVM流程简介说明 - 图文
- 计算机的网络实验四
- 砌体施工方案
- 运筹学考试资料
- 新北师大版小学四年级数学上册期末测试卷(6)
- 创国优汇报材料(密云路立交) - 图文
- 《维权与侵权》考试复习资料
- 《 自动控制原理》典型考试试题
- 中国古代文学名家的并称和特称
- 抗菌药物应知应会知识
- 如何编制2013版智能用电技术项目商业计划书(符合VC风投+甲级资
- 从高考真题中看如何提高高考政治复习的有效性
- 基于单片机数字时钟设计开题报告 精品 - 图文
- 庭院灯施工计划
- 经济法体系不同于立法体系
- 07年5月人力资源师三级试题和答案
- 新课标人教版三年级数学下册第八单元试卷(1)
- 项目招投标之串标现象分析
- 应急物资管理保障措施
- 骨质疏松案例-SOAP门诊教学病例