Java2实用教程(第三版)实验指导与习题解答.doc
1 Java 2 实用教程(第三版)实实用教程(第三版)实 验指导与习验指导与习题解答题解答 清华大学出版清华大学出版社社 (编著(编著 耿祥义耿祥义 张跃平)张跃平) 实验模版代码实验模版代码及答案及答案 建议使用文档建议使用文档结构图结构图 (选择(选择 WordWord菜单菜单视图视图文档结构图)文档结构图) 2 上机实践上机实践 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 实验接口回调.21 上机实践上机实践 5 字符串、时间与数字字符串、时间与数字.23 实验 1 STRING类的常用方法.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 3 上机实践上机实践 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 4 上机实践上机实践 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 5 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(宋体,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 6 模板模板 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(希腊字母表:); 7 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(); 实验实验 2 回文数回文数 1答案:答案: 【代码 1】: number=1 【代码 2】: d5=number/10000; 【代码 3】: d4=number%10000/1000; 【代码 4】: d3=number%1000/100; 【代码 5】: d5!=0 【代码 6】: d1=d5 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 位数的条件 8 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 9 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】: yourGuessrealNumber 【代码 3】: yourGuessc 【代码 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+bc 【代码 9】: boo=false; 【代码 10】: above=a; bottom=b; height=h; 【代码 11】: area=(above+bottom)/2*height; 11 return area; 【代码 12】: radius=r; 【代码 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) ; 12 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 返回 13 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); 14 实验实验 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); 15 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