1、Java语言程序设计试验指导书试验指导书高川翔2月一、试验地位、作用 Java语言程序设计试验作为课程实践性步骤之一,是教学过程中必不可少关键内容。经过计算机试验和案例分析,使学生加深了解、验证巩固课堂教学内容;增强高级语言程序设计感性认识;掌握程序设计基础方法;培养学生理论和实践相结合能力。二、试验开设对象 本试验开设对象为Java语言程序设计课程学习者(信息和计算科学专业本科生),试验为必修内容。 三、基础原理及课程介绍 Java语言程序设计是必修基础课程。本课程以BlueJ为工具,关键介绍面向对象程序设计方法,Java面向对象程序设计语言和面向对象程序设计工具。使学生掌握面向对象思想方法
2、,是后续专业课程基础。四、指导老师 标准上由Java语言程序设计讲授老师负责,由年轻老师担任关键试验指导老师,试验室人员配合指导。指导老师应在每次试验前讲清试验目标、基础原理、试验要求等,指导学生在要求时间内完成相关课程试验。五、试验设备配置 每人配置1台电脑,安装有JDK,和Blue J、Eclipse或JBuilder。 六、考评和汇报 1试验后,学生将试验结果等内容写出试验汇报,符合试验教学要求,并得到指导老师认可。 2指导老师对每份试验汇报进行审阅、评分。 3该试验程依附于理论课,试验课成绩记入课程平时成绩,占总成绩25%试验一Java运行环境安装、配置和运行一、试验课时3课时。二、试
3、验目标1 掌握下载并安装 JDK 软件包方法。2 掌握在BlueJ环境下编写、编译和运行 Java 程序方法。 3 了解 Java 语言概貌。 4 了解设置环境变量,命令行编译java程序方法。三、试验内容和要求内容:1安装 JDK 软件包和BlueJ开发环境并进行配置。 (1) 配置JDK运行环境:a) 配置windowspath环境变量。将安装J2SDK(注意:必需安装J2SDK)bin文件夹完整路径添加到path系统变量中,图34所表示。图11 path系统变量配置b) 配置CLASSPATH系统变量。假如系统变量中不存在classpath,则“新建”之。将J2SDKlib文件夹完整路径
4、写入。图35。图12 CLASSPATH系统变量配置(2) 进入DOS虚拟环境;(3) 将试验1程序保留在d:example文件夹下;(4) 使用javac命令编译程序;(图36)(5) 使用java运行程序。注意包中程序编译和运行方法。图13 利用JDK环境编译运行Java应用程序(以下试验前请仔细阅读BlueJ教程电子文档)2在BlueJ环境下新建一个工程,在工程中编写一个简单 Java 程序,在屏幕上输出”hello,java!”。 public class Hello public static void main(String args) System.out.println(hel
5、lo,java!); 3编译运行 Java 程序。4设置环境变量,在命令行下编译运行Java程序。5浏览运行JDK 自带 Applet 应用小程序。6在程序中设置断点、单步实施、查看变量值。要求:1、独立完成;并以实际上机操作计成绩;2、全部上机试验必需在下一次试验之前完成,不然此次试验成绩算0分;3、编写试验汇报(根据汇报模板编写,必需写出具体试验步骤及必需屏幕截图)。试验二创建一个Applet一、试验课时3课时。二、试验目标了解Applet和Application区分,学会设计Applet程序。三、试验内容和要求已知JButton类有一个结构函数原形为:public JButton(Str
6、ing text,Icon icon)。其中参数text为显示在按钮上文本、参数icon为显示在按钮上图标。下面例子就是利用此结构函数产生一个带有文本、图标按钮,而且当按一下按钮,图标就切换一次。此图标切换是在两个图标中循环进行。程序以下:import javax.swing.*;import java.awt.*;import java.awt.event.*;public class ButtonExample extends JAppletint imageNum=1;public void init( )Container con = getContentPane( );final J
7、Button jb_ok=new JButton(按我,new ImageIcon(sun1.gif);con.setLayout(new FlowLayout();con.add(jb_ok);jb_ok.addActionListener(new ActionListener( )public void actionPerformed(ActionEvent e)if(imageNum = =1)jb_ok.setIcon(new ImageIcon(sun2.gif);imageNum=2;elsejb_ok.setIcon(new ImageIcon(sun1.gif);imageNu
8、m=1;);此程序中还用到了JButton类setIcon( )方法,用以设置按钮新图标。Html文件代码: (文件名为Appcounter.htm)将该文件和ButtonExample.class保留在同一个目录中,使用appletviewer appconmter.htm命令就能够运行这个applet。要求:1、独立完成;并以实际上机操作计成绩;2、全部上机试验必需在下一次试验之前完成,不然此次试验成绩算0分;3、编写试验汇报(根据汇报模板编写,必需写出具体试验步骤及必需屏幕截图)。试验三数据类型及表示式一、试验课时3课时。二、试验目标1掌握Java语言基础数据类型,了解数据类型包装类概念
9、。2掌握变量和表示式使用方法。3了解类型转换概念。三、试验内容和要求1输入并运行下面程序,体会多种基础数据类型变量申明、初始化及使用。public class BasicTypespublic static void main(String args) byte b = 0x88; short s = 0200; int i = 111111; long l = 0x; char c =A; float f =.33f; double d =.00001001; boolean bl= true; System.out.println(byte b =+b); System.out.print
10、ln(short s =+s); System.out.println(int i =+i); System.out.println(long 1 =+1); System.out.println(char c =+c); System.out.println(float f =+f); System.out.println(double d =+d); System.out.println(boolean bl =+bl);思索:(1)上述程序中定义了哪些变量?每个变量变量名、数据类型和作用域分别是什么?(2)查看程序运行结果,分析为何有些变量最终输出结果和初始化时不一样?2输入并运行下面程
11、序并分析结果,体会多种表示式使用方法。(1)public class ArithmaticOppublic static void main(String args ) int a =5, b=3,c; double d=2.5; c=a/b+a%b; System.out.println(c=+c); d=c*b+a/b*d; System.out.println(d=+d);(2) public class ArithmaticOp2public static void main(String args ) int a,b,c; a=b=c=5; a=+b+c; System.out.pr
12、intln(a=+a+b=+b+c=+c); a=b+c+; System.out.println(a=+a+b=+b+c=+c); a=b+c; System.out.println(a=+a+b=+b+c=+c;(3) public class LogicOppublic static void main(String args ) boolean x, y; x=533*46&!(58+4|5+6float int i1 = c+i; /char+intint long l1 = 1+i1; /long+intlong double d1 =f1/i1d; /float/intfloat
13、,floatdoubledouble System.out.println(f1=+f1); System.out.println(il=+il); System.out.println(l1=+l1); System.out.println(d1=+d1);思索:(1)上面程序用到了哪些自动类型转换?分别是怎样实现?(2)何时需要用到强制类型转换?强制类型转换可能会造成什么不良后果?提升:1在Java中,数据类型包装类(type wrapper class)用于封装基础数据类型相关信息和操作。即使我们常常直接使用Java基础数据类型,但因为它本身不含有任何操作,无法扩充本身功效,所以,为确保
14、Java语言纯面向对象特征,Java语言基础包为数据类型提供了部分对象封装。数据类型包装类是由多个类组成一个集合,每种数据类型均存在对应对象封装类。下表列出了Java数据类型包装及其对应基础数据类型。基础数据类型 数据类型包装类byte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean Boolean每一个类全部提供了部分属性和方法,用户能够依据需要来灵活使用。注意:数据类型包装类和对应基础数据类型名字几乎相同,请不要混淆。前者显著特点是第一个字母应为大写。2输入并运行下面程序,了解
15、并掌握数据类型包装类属性和使用方法。public class MaxVariablespublic static void main(String args ) /integers byte largestByte =Byte.MAX_VALUE; /MAX_VALUE是Byte类属性(表示Byte类所能达成最大值) short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; /real numbers float largest
16、Float = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; /other primitive types char aChar=S; boolean aBoolean =true; /display them all System.out.println(The largest byte value is+largestByte); System.out.println(The largest short value is+largestShort); System.out.println(The largest inte
17、ger value is+largestInteger); System.out.println(The largest long value is+largestLong); System.out.println(The largest float value is+largestFloat); System.out.println(The largest double value is+largestDouble); /Character类有一个方法boolean isUpperCase(char ch)是用来判定一个字符是 /否是大写 if(Character.isUpperCase(a
18、Char) System.out.println(The character+aChar+is upper case. ); else System.out.println(The character+aChar+is lower case. ); System.out.println(The value of aBoolean is+aBoolean);(1)修改上面程序,让它能输出每种整型数据类型能表示最小值。(提醒:Byte类型最小值属性是MIN_VALUE)(2)Character类有另一个方法boolean isLowerCase(char ch),能够来判定一个字符是否为小写。修改
19、合适语句,使程序完成相同功效。(3)修改上面程序,使布尔型变量aBoolean含有一个不一样值。要求:1、独立完成;并以实际上机操作计成绩;2、全部上机试验必需在下一次试验之前完成,不然此次试验成绩算0分;3、编写试验汇报(根据汇报模板编写,必需写出具体试验步骤及必需屏幕截图)。试验四控制步骤一、试验课时3课时。二、试验目标1充足掌握步骤控制语句格式和功效。2熟练利用步骤控制语句进行程序设计。3学会进行简单程序调试。三、试验内容和要求1输入并运行下面两个程序:(1)public class WhileDemo2public static void main (String args) int
20、i =100; while(i100 System.out.println(Print+i); i+; (2) public class DoWhileDemo2public static void main (String args) int i =100; do System.out.println(Print+i); i+ while(i100);思索:运行上面两个程序,比较While和DoWhile语句实施过程有何不一样。2输入并运行下面程序:public class lxsum public static void main (String args) int i =1,sum; s
21、um=0; while(i=100) sum+=i; i+ System.out.println(sum=+sum); 思索:(1)循环通常适适用于什么情况?(2)请用for循环和do-while循环为实现上面程序功效。3输入并运行下面程序,体会switch语句使用。public class lxswitchpublic static void main (String args) int x=1,y=2,i=0,j=0; switch(x) case 1: switch(y) case 1: i+ +; break; case 2:j+; break; default: i+ +; j+;
22、case2: i+ +;j+;break; default: i+;j+; System.out.println(i=+i); Sysem.out.printin(j=+j);思索:(1)将你分析程序得到结果和实际运行结果相比较,看看有没有什么不一样。假如有不一样,原因在哪里?(2)break语句在switch语句中起到了什么作用?4输入并运行下面程序,判定某十二个月是否是闰年。闰年条件是符合下面二者之一:(1)能被4整除,但不能被100整除;(2)能被4整除,又能被400整除。public class JudgeLeapYearpublic staic void main (String a
23、rgs ) /方法1 int year=1800; if(year%4= =0 & year%100!=0)|(year%400= = 0) System.out.println(year+年是闰年); else System.out.println(year+年不是闰年); /方法2 year = 1997; boolean leap; if(year%4!=0) leap=false; else if (year%100!=0) leap = true; else if(year%400!=0) leap = false; else leap = true; if (leap = = tr
24、ue) System.out.println(year+年是闰年); else System.out.println(year+年不是闰年) /方法3 year=; if (year%4= = 0) if (year%100= =0) if (year%400= =0) leap=true; else leap=false; else leap = false; else leap = false; if (leap = = true) System.out.println(year+年是闰年); else System.out.prinln(year+年不是闰年); 思索:(1)程序中是怎样
25、判定一个数能被另一个数整除?(2)请说出程序中用了哪三种方法来判定是否闰年,并体会其中联络和区分。提升:在输入程序过程中难免要犯错。通常说业,程序中错误有两种:语法错误和逻辑错误。程序调试就是要找出程序中错误,编出正确程序。下面程序用来输出5次Hello!,请更正程序中错误,并上机调试运行。public class Hello public static void main(String args) for(i=1;i5;i+); System.out.println(time+i+:Hello! ); 在MS-DOS下编译该程序,输入javac Hello. java,屏幕上会出现以下错误信
26、息:Hello.java:5:Undefined variable:ifor (i=1;i5;i+);?Hello.java:5:Undefined variable:ifor(i=1;i5;i+);Hello.java:5:Undefined varable:ifor (i=1;i5;i+)?Hello.java:7:Undefined variable:iSystem.out.println(time+i+:Hello);4errors能够看到,Java中错误信息包含以下内容:(1)源程序文件名;(2)犯错那一行行号;(3)犯错类型;(4)犯错那一行内容。依据系统给犯错误信息,能够进行对应
27、修改。如上面多个错误,类型全部是Undefined variable:i,也就是说,变量i还未定义。于是就能够分析出犯错原因是程序中没有申明变量i就直接使用了它,就是一个语法错误,在源程序中进行对应修改。修改过程序内容以下:public class Hellopublic static void main (String args) int i; /新添变量说明 for (i=1;i5;i + +) System .out. println(time+i+:Hello! ) 对上面程序再进行编译,顺利经过(屏幕没有出现任何信息)后生成对应.class文件。运行该文件,结果为:time 5:He
28、llo!只输出了一次Hello!和题目标要求(输出5次Hello!)不符,这是一个逻辑错误。分析结果,发觉它只实施了i为5那一次输出。再次检验程序,发觉在for语句圆括号后面多了一个分号,造成了for语句循环体实际为空语句。从源程序中将;去掉,重新存盘、编译、运行。结果以下:time1:Hello!time2:Hello!time3:Hello!time4:Hello!发觉还少输出一次Hello!,将循环变量结束条件为i6,重新存盘、编译,运行正确。思索:(1)变量i在程序中起到什么作用?(2)假如将i初值改设为0,那么应怎样改写终止循环条件?(3)假如将i初值改设为3,那么应怎样改写终止循环
29、条件?要求:1、独立完成;并以实际上机操作计成绩;2、全部上机试验必需在下一次试验之前完成,不然此次试验成绩算0分;3、编写试验汇报(根据汇报模板编写,必需写出具体试验步骤及必需屏幕截图)。试验五数组一、试验课时3课时。二、试验目标1掌握Java中数组申明、创建、初始化和使用。2了解Java中提供对数组排序常见方法。3了解在数组中查找一个特定值常见方法。三、试验内容和要求1数组元素排序是一个常常会碰到问题,冒泡(起泡)排序法(bubble sort)是一个常见排序方法。它基础思想是:对一个含有n个元素数组,首先将第一个元素值和第二个元素值进行比较,若为逆序(即第一个元素值大于第二个元素值),则
30、将两个元素交换之,然后比较第二个元素和第三个元素值,依次类推,直到第n1个元素和第n个元素进行比较、交换为止。如此经过一趟排序,使得值最大元素被安置到最终一个元素位置上。然后,对前n1个元素进行一样操作,则含有次大值元素被安置在第n1个元素位置上。反复以上过程直到没有元素需要交换为止。此过程可图示以下:初始数组元素: 49 38 65 97 76 13 27第1趟排序以后:38 49 65 76 13 27 97第2趟排序以后:38 49 65 13 27 76 97第3趟排序以后:38 49 13 27 65 76 97第4趟排序以后:38 13 27 49 65 76 97第5趟排序以后:
31、13 27 38 49 65 76 97第6趟排序以后:13 27 38 49 65 76 97在此过程中,值小数组元素好比水中气泡逐趟向上飘浮,而值大数组元素好比石块沉入水底。下面代码是冒泡排序法程序实现,请输入并运行之:public class BubbleSortpublic static void main (String args ) int i,j; int intArray =30,1,-9,70,25; int 1=intArray .length; for(i=1;i1;i+) for(j=0;jintArrayj+1) int t =intArrayi; intArrayj
32、=intArrayj+1; intArrayj+1=t; for(i=0;i =low) System.out.println(Low+low+Mid+mid+High+high); if(value= =arraymid) found=true; else if(valuearraymid) high =mid-1; else low =mid+1; mid= (high+low)/2; cnt + +; System.out.println(Steps+cnt); retrun (found)?mid:-1);public static void main(String args ) in
33、t a =new int 100; for (int i=0;ia.length;i+) a i=i; System.out.println(Result+bsearch(a,32); System.out.println(Result+bsearch(a,1); System.out.println(Result+bsearch(a,1031);思索:(1)程序中整型变量high、low、mid、cnt分别起什么作用?布尔型变量found又起到什么作用?(2)该程序是怎样确定查找区间范围?(3)该程序先定义了一个bsearch方法,然后在main()中数次调用该方法,请说出这么做有什么优点。
34、4编程实现在无序数组中次序查找一个特定值,找到则返回该值在数组中位置(下标),找不到则返回-1。(想想,为何用负值用为返回标志?)提醒:数组中元素是无序,所以搜索范围一定要是整个数组。5输入并运行下面程序,体会二维数组使用方法。class MaxMatrixpublic static void main(String args ) int row =0; int col=0; /放行号和列号 int max; int m =6,2,3,24,-5,8,7,6,-3,18,-4,1; max =m0 0; for (int i=0;imax) max =mi j; row =i ; col =
35、j; System.out.println(最大元素值为:+max); System.out.println(该元素位置在:+row+行,+col+列);6修改上面程序,改为求矩阵中最小那个元素值,和其所在行号和列号。提升:1在Java中对数组进行排序,能够使用以下步骤:(1)使用import java.util.*语句,能够让java.util包中全部类在程序中全部能够使用;(2)创建一个数组;(3)使用Arrays类sort( )方法来重新调整一个数组数据。用Arrays类sort( )方法排过序数组元素将被调整为按升序排列。import java.util.*; /让java.util包
36、中全部类在程序中全部能够使用class SortNamepublic static void main(String args ) String names = Akbar,Umberto,Peter,Zemo,Digo; System.out.println(数组元素原来次序是:); for (int i =0;inames.length;i+) System.out.println(i+; +namesi); Arrays.sort(names); /使用Arrays类sor()方法为数组names排序 System.out.println(数组元素现在次序是:); for (int i
37、=0;inames.length;i+) System.out.println(i+: +namesi);2.建立一个字符串数组并按升序进行排序。3.建立一个浮点型数组并按升序进行排序。要求:1、独立完成;并以实际上机操作计成绩;2、全部上机试验必需在下一次试验之前完成,不然此次试验成绩算0分;3、编写试验汇报(根据汇报模板编写,必需写出具体试验步骤及必需屏幕截图)。试验六类一、试验课时3课时。二、试验目标1掌握怎样定义类。2掌握怎样定义类组员变量、组员方法。3掌握怎样创建对象。4掌握关键字static使用方法。5掌握类组员访问权限。三、试验内容和要求1下面是一个老师类Teacher,用于学校
38、某个系部管理。系部在管理老师时,所关心信息关键有老师编号、姓名、性别、年纪、家庭住址、电话号码等,于是抽取这些属性来描述老师这个实体。考虑到老师年纪、家庭住址、电话号码等不宜对无关人员公开,于是将这些数据设为私有组员变量(即实施保护)。要取得这些数据,必需使用类所提供一组方法,并给出口令。检验口令是否正确是由私有方法checkPasswork完成。阅读并编译这一程序,体会类组员变量、类方法和访问权限设计。class Teacher /定义老师类/申明组员变量String tCode; /老师编号String tName; /老师姓名String tSex; /老师性别private Strin
39、g tAge; /老师年纪private String tAddr; /家庭住址private String tTelenmb; /电话号码private String tPassword;访问口令/申明结构方法Teacher(String password) tPassword = password;/申明组员方法private int checkPassword(String password) /私有方法:检验口令是否正确 if(tPassword= =password) return 1; else return 0;void setAge(String passwork,String age) /置年纪