1、Java语言程序设计实验指导书实验指导书Java语言程序设计实验指导书实验指导书高川翔2012年2月一、实验的地位、作用 Java语言程序设计实验作为课程实践性环节之一,是教学过程中必不可少的重要内容。通过计算机实验和案例分析,使学生加深理解、验证巩固课堂教学内容;增强高级语言程序设计的感性认识;掌握程序设计的基本方法;培养学生理论与实践相结合的能力。二、实验开设对象 本实验开设对象为Java语言程序设计课程的学习者(信息与计算科学专业本科生),实验为必修内容。三、基本原理及课程简介 Java语言程序设计是必修基础课程。本课程以BlueJ为工具,主要介绍面向对象的程序设计方法,Java面向对象
2、程序设计语言和面向对象程序设计工具。使学生掌握面向对象的思想方法,是后续专业课程的基础。四、指导教师 原则上由Java语言程序设计讲授教师负责,由年轻教师担任主要的实验指导教师,实验室人员配合指导。指导教师应在每次实验前讲清实验目的、基本原理、实验要求等,指导学生在规定的时间内完成相关课程实验。五、实验设备配置 每人配置1台电脑,安装有JDK,以及Blue J、Eclipse或者JBuilder。六、考核与报告 1实验后,学生将实验结果等内容写出实验报告,符合实验教学的要求,并得到指导教师的认可。 2指导教师对每份实验报告进行审阅、评分。 3该实验程依附于理论课,实验课的成绩记入课程平时成绩,
3、占总成绩的25%实验一Java运行环境的安装、配置与运行一、实验课时3课时。二、实验目的1 掌握下载并安装 JDK 软件包的方法。2 掌握在BlueJ环境下编写、编译与运行 Java 程序的方法。 3 了解 Java 语言的概貌。 4 了解设置环境变量,命令行编译java程序的方法。三、实验内容和要求内容:1安装 JDK 软件包和BlueJ开发环境并进行配置。 (1) 配置JDK运行环境:a) 配置windows的path环境变量。将安装的J2SDK(注意:必须安装J2SDK)的bin文件夹的完整路径添加到path系统变量中,如图34所示。图11 path系统变量的配置b) 配置CLASSPA
4、TH系统变量。如果系统变量中不存在classpath,则“新建”之。将J2SDK的lib文件夹的完整路径写入。如图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
5、public static void main(String args) 3编译运行 Java 程序。4设置环境变量,在命令行下编译运行Java程序。5浏览运行JDK 自带的 Applet 应用小程序。6在程序中设置断点、单步执行、查看变量值。要求:1、独立完成;并以实际上机操作计成绩;2、所有上机实验必须在下一次实验之前完成,否则此次实验成绩算0分;3、编写实验报告(按照报告模板编写,必须写出详细的实验步骤及必要的屏幕截图)。实验二创建一个Applet一、实验课时3课时。二、实验目的了解Applet与Application的区别,学会设计Applet程序。三、实验内容和要求已知JButton
6、类有一个构造函数原形为:public JButton(String 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( )Contai
7、ner con = getContentPane( );final JButton 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.setI
8、con(new ImageIcon(sun1.gif);imageNum=1;);此程序中还用到了JButton类的setIcon( )方法,用以设置按钮的新的图标。Html文件代码: (文件名为Appcounter.htm)将该文件与ButtonExample.class保存在同一个目录中,使用appletviewer appconmter.htm命令就可以运行这个applet。要求:1、独立完成;并以实际上机操作计成绩;2、所有上机实验必须在下一次实验之前完成,否则此次实验成绩算0分;3、编写实验报告(按照报告模板编写,必须写出详细的实验步骤及必要的屏幕截图)。实验三数据类型及表达式一、实
9、验课时3课时。二、实验目的1掌握Java语言的基本数据类型,了解数据类型包装类的概念。2掌握变量和表达式的用法。3理解类型转换的概念。三、实验内容和要求1 输入并运行下面的程序,体会各种基本数据类型的变量的声明、初始化及使用。public class BasicTypespublic static void main(String args) byte b = 0x88; short s = 0200; int i = 111111; char c =A; float f =.33f; double d =.00001001; boolean bl= true;byte b =+b);shor
10、t s =+s);int i =+i);long 1 =+1);char c =+c);float f =+f);double d =+d);boolean bl =+bl);思考:(1)上述程序中定义了哪些变量?每个变量的变量名、数据类型和作用域分别是什么?(2)查看程序的运行结果,分析为什么有些变量最后输出的结果和初始化时的不同?2 输入并运行下面的程序并分析结果,体会各种表达式的使用方法。(1)public class ArithmaticOppublic static void main(String args ) int a =5, b=3,c; double d=2.5; c=a/
11、b+a%b;c=+c); d=c*b+a/b*d;d=+d);(2) public class ArithmaticOp2public static void main(String args ) int a,b,c; a=b=c=5; a=+b+c;a=+a+b=+b+c=+c); a=b+c+;a=+a+b=+b+c=+c); a=b+c;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+
12、i; /char+intint long l1 = 1+i1; /long+intlong double d1 =f1/i1d; /float/intfloat,floatdoubledoublef1=+f1);il=+il);l1=+l1);d1=+d1);思考:(1)上面的程序用到了哪些自动类型转换?分别是如何实现的?(2)何时需要用到强制类型转换?强制类型转换可能会造成什么不良后果?提高:1在Java中,数据类型包装类(type wrapper class)用于封装基本数据类型的有关信息和操作。虽然我们经常直接使用Java的基本数据类型,但由于它本身不具备任何操作,无法扩充自身功能,因此
13、,为确保Java语言的纯面向对象特性,Java的语言基础包为数据类型提供了一些对象封装。数据类型包装类是由多个类组成的一个集合,每种数据类型均存在相应的对象封装类。下表列出了Java的数据类型包装及其对应的基本数据类型。基本数据类型 数据类型包装类byte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean Boolean每一个类都提供了一些属性和方法,用户可以根据需要来灵活使用。注意:数据类型包装类与相应的基本数据类型名字几乎相同,请不要混淆。前者的显着特点是第一个字母应为大写。2输
14、入并运行下面的程序,了解并掌握数据类型包装类的属性和用法。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
15、float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; /other primitive types char aChar=S; boolean aBoolean =true; /display them all The largest byte value is+largestByte);The largest short value is+largestShort);The largest integer value is+largestInteger);The largest long
16、value is+largestLong);The largest float value is+largestFloat);The largest double value is+largestDouble); /Character类有一个方法boolean isUpperCase(char ch)是用来判断一个字符是 /否是大写 if(Character.isUpperCase(aChar)The character+aChar+is upper case. ); elseThe character+aChar+is lower case. ); The value of aBoolean
17、 is+aBoolean);(1)修改上面的程序,让它能输出每种整型数据类型能表示的最小值。(提示:Byte类型的最小值属性是MIN_VALUE)(2)Character类有另一个方法boolean isLowerCase(char ch),可以来判断一个字符是否为小写。修改适当的语句,使程序完成相同的功能。(3)修改上面的程序,使布尔型变量aBoolean具有一个不同的值。要求:1、独立完成;并以实际上机操作计成绩;2、所有上机实验必须在下一次实验之前完成,否则此次实验成绩算0分;3、编写实验报告(按照报告模板编写,必须写出详细的实验步骤及必要的屏幕截图)。实验四控制流程一、实验课时3课时。
18、二、实验目的1充分掌握流程控制语句的格式和功能。2熟练运用流程控制语句进行程序设计。3学会进行简单的程序调试。三、实验内容和要求1输入并运行下面两个程序:(1)public class WhileDemo2public static void main (String args) int i =100; while(i100Print+i); i+; (2) public class DoWhileDemo2public static void main (String args) int i =100; doPrint+i); i+ while(i100);思考:运行上面两个程序,比较Whi
19、le和DoWhile语句的执行过程有何不同。2输入并运行下面的程序:public class lxsum public static void main (String args) int i =1,sum; sum=0; while(i=100) sum+=i; i+ 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
20、=0; switch(x) case 1: switch(y) case 1: i+ +; break; case 2:j+; break; default: i+ +; j+; case2: i+ +;j+;break; default: i+;j+; i=+i);j=+j);思考:(1)将你分析程序得到的结果与实际的运行结果相比较,看看有没有什么不同。如果有不同,原因在哪里?(2)break语句在switch语句中起到了什么作用?4 输入并运行下面的程序,判断某一年是否是闰年。闰年的条件是符合下面二者之一:(1)能被4整除,但不能被100整除;(2)能被4整除,又能被400整除。publi
21、c class JudgeLeapYearpublic staic void main (String args ) /方法1 int year=1800; if(year%4= =0 & year%100!=0)|(year%400= = 0)年是闰年); else年不是闰年); /方法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 = =
22、 true)年是闰年); else年不是闰年) /方法3 year=2000; 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)年是闰年); else年不是闰年); 思考:(1)程序中是如何判断一个数能被另一个数整除的?(2)请说出程序中用了哪三种方法来判断是否闰年,并体会其中的联系和区别。提高:在输入程序的过程中难免要出错。一般说业,程序中的错误有两种:语法错误和逻辑错
23、误。程序调试就是要找出程序中的错误,编出正确的程序。下面的程序用来输出5次Hello!,请更正程序中的错误,并上机调试运行。public class Hello public static void main(String args) for(i=1;i5;i+); time+i+:Hello! ); 在MS-DOS下编译该程序,输入javac Hello. java,屏幕上会出现如下错误信息:Hello.java:5:Undefined variable:ifor (i=1;i5;i+);?Hello.java:5:Undefined variable:ifor(i=1;i5;i+);Hel
24、lo.java:5:Undefined varable:ifor (i=1;i5;i+)?Hello.java:7:Undefined variable:itime+i+:Hello);4errors可以看到,Java中的错误信息包含如下内容:(1)源程序文件名;(2)出错那一行的行号;(3)出错的类型;(4)出错那一行的内容。根据系统给出的错误信息,可以进行相应的修改。如上面的几个错误,类型都是Undefined variable:i,也就是说,变量i尚未定义。于是就可以分析出出错的原因是程序中没有声明变量i就直接使用了它,就是一个语法错误,在源程序中进行相应的修改。修改过的程序内容如下:p
25、ublic class Hellopublic static void main (String args) int i; /新添的变量说明 for (i=1;i5;i + +) System .out. println(time+i+:Hello! ) 对上面的程序再进行编译,顺利通过(屏幕没有出现任何信息)后生成相应的.class文件。运行该文件,结果为:time 5:Hello!只输出了一次Hello!与题目的要求(输出5次Hello!)不符,这是一个逻辑错误。分析结果,发现它只执行了i为5的那一次输出。再次检查程序,发现在for语句的圆括号后面多了一个分号,造成了for语句的循环体实际
26、为空语句。从源程序中将;去掉,重新存盘、编译、运行。结果如下:time1:Hello!time2:Hello!time3:Hello!time4:Hello!发现还少输出一次Hello!,将循环变量的结束条件为i6,重新存盘、编译,运行正确。思考:(1)变量i在程序中起到什么作用?(2)如果将i的初值改设为0,那么应如何改写终止循环的条件?(3)如果将i的初值改设为3,那么应如何改写终止循环的条件?要求:1、独立完成;并以实际上机操作计成绩;2、所有上机实验必须在下一次实验之前完成,否则此次实验成绩算0分;3、编写实验报告(按照报告模板编写,必须写出详细的实验步骤及必要的屏幕截图)。实验五数组
27、一、实验课时3课时。二、实验目的1掌握Java中数组的声明、创建、初始化和使用。2了解Java中提供的对数组排序的常用方法。3了解在数组中查找一个特定的值的常用方法。三、实验内容和要求1数组元素的排序是一个经常会遇到的问题,冒泡(起泡)排序法(bubble sort)是一种常用的排序方法。它的基本思想是:对一个具有n个元素的数组,首先将第一个元素的值和第二个元素的值进行比较,若为逆序(即第一个元素的值大于第二个元素的值),则将两个元素交换之,然后比较第二个元素和第三个元素的值,依次类推,直到第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趟排序之后:13 27 38 49 65 76 97第
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1