《Java语言程序设计》实验指导书.docx
《《Java语言程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计》实验指导书.docx(59页珍藏版)》请在冰点文库上搜索。
《Java语言程序设计》实验指导书
班级姓名
学号成绩
《Java语言程序设计》
实验指导书
2011年9月
第一章概述(Overview)
§1.1目的任务
《Java语言程序设计》是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
面向对象程序设计(JAVA)的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握面向对象程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
§1.2实验的基本要求
任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:
查找资料、设计算法、完成程序、写出预习报告等,做到有准备地上机。
进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。
对学生上机实验提出以下要求:
(1)上机实验之前,学生应当为每次上机的内容作好充分准备。
对每次上机需要完成的题目进行认真的分析,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。
(2)按照实验目的和实验内容以及思考题的要求进行上机操作。
录入程序,编译调试,反复修改,直到使程序正常运行,得出正确的输出结果为止。
(3)根据实验结果,写出实验报告。
实验报告应当包括:
实验题目,程序清单,运行结果,以及通过上机取得了哪些经验。
本书所列出的上机实验题目,基本包括了教材中所涉及的主要知识点。
希望学生全面完成这些实验。
为了使学生在上机实验中得到更大的提高,任课教师可以结合具体情况补充一些专业针对性更强的实验题目。
在学校实验条件允许的前提下,可把上机实验时间适当加长一些。
这对学生程序设计能力的提高更加有利。
§1.3实验学时数
18学时
§1.4实验环境
1.单机模式
操作系统:
Windows9x/2000/XP/Win7
开发工具:
JDK,JCreator,Eclipse
2.客户机/服务器模式(C/S)
操作系统:
Windows9x,WindowsServer2003/2008
数据库管理系统:
Access,SQLServer,MySQL,Oracle
开发工具:
JDK,JCreator,Eclipse
§1.5考核方法
对学生上机情况(指上机程序设计能力、程序调试能力以及最后提交实验报告)做综合测评,综合设计通过答辩后给出上机成绩。
该成绩占课程总评成绩30%。
第二章实验内容(Experiments)
§2.1Java程序的编辑、编译、运行环境
§2.1.1实验目的、内容及性质
掌握使用JDK开发Java程序的步骤、了解Java程序运行环境掌握程序调试的全部过程,学会编写和调试JavaApplication程序。
掌握Java程序的基本语法。
实验性质:
验证、必做
实验学时:
2学时
§2.1.2问题及思考
1、什么是Java虚拟机?
它的作用是什么?
什么是Java运行环境?
如何实现跨平台?
什么是类库?
什么是Java虚拟机与字节码?
什么是Java的byte-codes?
它的最大好处是什么?
2、什么是环境变量path、classpath、JAVA_HOME;查看系统中对环境变量path、classpath、JAVA_HOME的设置,解释其作用;说明不同操作系统如何查看和设置环境变量?
3、什么叫做源程序?
什么叫做编译?
机器语言程序、高级语言程序以及可表示成Java字节码的程序之间的区别是什么?
如何编译源代码文件?
编译你刚保存的文件?
有何问题?
如何修改?
4、如何执行Java程序?
执行你刚编译好的程序?
结果如何?
§2.1.3实验指导
1、、JDK的安装和环境变量设置
(1)JDK1.6的安装与环境配置
(2)文本编辑器EditPlus的安装
(3)Java开发工具Eclipse的安装
2、HelloWorld程序调试
(1)请用任何文本编辑器输入以下内容并保存为Hello.java文件(只能保存为Hello.java,不能使用别的文件名),请严格注意大小写:
publicclassHello{
publicstaticvoidmain(String[]args){
System.out.println("Hello,world.");
}
}
然后打开控制台,切换到存放Hello.java的目录下,输入:
javacHello.java
如果编译通过,屏幕上没有任何显示。
否则,屏幕上会输出出错信息,请仔细检查源代码。
(2)运行一个Java程序
打开控制台,切换到存放Hello.class的目录下,然后输入:
javaHello
稍等几秒钟,屏幕输出:
Hello,world.
说明运行成功!
注意事项:
Java严格区分大小写,无论是源代码,还是文件名,目录名,Windows用户要特别留意。
此外,不要用中文作文件名和目录名,也不要在文件名或目录名中使用特殊字符,以免在Linux下运行正常的Java程序不能在Windows中运行。
习惯上,类名以大写字母开头,方法名以小写字母开头,请严格遵守命名习惯以免在某些IDE中不能正常编译或运行。
§2.1.4实践编程
编写以下程序,并在DOS状态下调试通过。
1、编写程序比较两个整数大小,并输出大的数。
2、判断一个年份是否为闰年。
根据天文历法规定,每400年中有97个闰年。
凡不能被100整除但能被4整除的年份,或能被400整除的年份是闰年,其余年份是平年。
如1996、2000是闰年,而1900是平年。
3、输入一个三位整数,将它反向输出.如整数为123,则输出321
4、求100~999中的。
所谓水仙花数是指一个三位数,
它的每位数字的立方之和等于该数。
例如,因为153=13+53+33,所以153为水仙花数。
§2.2Java程序设计结构
§2.1.1实验目的、内容及性质
1、掌握Java语言基础知识如变量、编程基本结构。
2、数组的使用
3、系统提供数学与字符串函数的使用
实验性质:
验证、必做
实验学时:
4学时
§2.2.2问题及思考
1、字符串和字符如何区别?
常见的转义字符有那些?
2、变量按作用域可以分为那几类?
3、说明java语言中的数据类型以及基本数据类型的默认值。
类型转换规则。
4、数组如何定义,如何初始化?
基本数组的一些算法?
如查找、排序等?
5、字符串处理函数,数学函数总结。
§2.2.3实验指导
1、选择结构示例
(1)if语句
//求三个数中的最大者
publicclassMaxOfThree
{
publicstaticvoidmain(Stringargs[])
{
inta=5;
intb=6;
intc=7;
if(a>b)
if(a>c)
{
System.out.println("三个数中最大的是:
"+a);
}
else
{
System.out.println("三个数中最大的是:
"+c);
}
elseif(b>c)
{
System.out.println("三个数中最大的是:
"+b);
}
else
{
System.out.println("三个数中最大的是:
"+c);
}
}
}
(2)switch结构
publicclassSwitchOp2
{
publicstaticvoidmain(Stringargs[])
{
floata=9;
floatb=3;
floatresult;
charop='+';
switch(op)
{
case'+':
result=a+b;break;
case'-':
result=a-b;break;
case'*':
result=a*b;break;
case'/':
result=a/b;break;
default:
result=0;
}
System.out.println("result="+result);
}
}
2、循环结构示例
(1)for语句
//用for语句计算10的阶乘
publicclassForOp1
{
publicstaticvoidmain(Stringargs[])
{
intn;
longresult;
for(n=10,result=1;n>0;n--)
result*=n;
System.out.println("10!
="+result);
}
}
(2)while语句
//用while语句计算10的阶乘
publicclassWhileOp
{
publicstaticvoidmain(Stringargs[])
{
intn=10;
longresult=1;
while(n>=1)
result*=n--;
System.out.println("10!
="+result);
}
}
3、数组示例
classUseArray{
publicstaticvoidmain(Stringargs[]){
inti,j,max,sum,temp;
//定义数组,为其初始化
inta[]={3,5,2,1,4};
//求数组最大值
max=a[0];
for(i=1;iif(a[i]>max)
max=a[i];
System.out.println("数组最大值为"+max);
//求数组的和
sum=0;
for(i=0;isum+=a[i];
System.out.println("数组的和为"+sum);
//对数组排序(升序)
for(i=0;ifor(j=i+1;jif(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
//输出排序之后的数组
System.out.println("数组排序之后的结果为");
for(i=0;iSystem.out.println("a["+i+"]="+a[i]);
}
}
4、数学函数以及字符串函数示例
(1)数学函数
//演示如何调用JavaAPI完成数值运算
publicclassMathDemo{
publicstaticvoidmain(String[]args){
//演示求绝对值和求最大、最小值函数的用法
System.out.println("abs(-5)="+Math.abs(-5));
System.out.println("max(2.72,3.14)="+Math.max(2.72,3.14));
System.out.println("min(256,285)="+Math.min(256,285));
//演示四舍五入函数的用法
System.out.println("round(3.8)="+Math.round(3.8));
System.out.println("round(-3.8)="+Math.round(-3.8));
//演示求平方根和求幂函数的用法
System.out.println("sqrt
(2)="+Math.sqrt
(2));
System.out.println("pow((1+2.25/100),5)="+Math.pow((1+2.25/100),5));
//演示指数与对数函数的用法
System.out.println("E="+Math.E);
System.out.println("exp
(2)="+Math.exp
(2));
System.out.println("log
(2)="+Math.log
(2));
//演示天花板与地板函数的用法
System.out.println("ceil(3.14)="+(int)Math.ceil(3.14));
System.out.println("floor(3.14)="+(int)Math.floor(3.14));
//演示三角函数的用法
System.out.println("Pi="+Math.PI);
System.out.println("sin(Pi/2)="+Math.sin(Math.PI/2));
System.out.println("cos(0)="+Math.cos(0));
}
}
(2)字符串函数
//演示字符串对象的用法
publicclassStringDemo{
publicstaticvoidmain(String[]args){
//访问字符串长度
StringmyName="G.Leeman";
intlength="BestWishes!
".length();
System.out.println("长度1:
"+myName.length());//输出9
System.out.println("长度2:
"+length);//输出3而不是6
//比较字符串大小
Stringname1="programminginjava";
Stringname2="ProgramminginJava";
System.out.println("比较1:
"+name1.equals(name2));//输出false
System.out.println("比较2:
"+name1.equalsIgnoreCase(name2));
//输出true
System.out.println("比较3:
"+pareTo("Program"));//输出正数
//访问字符串中的字符
System.out.println("字符1:
"+name1.charAt(4));//输出r而不是g
System.out.println("字符2:
"+name1.indexOf('a'));//输出5
System.out.println("字符3:
"+name2.lastIndexOf('a'));//输出18
//访问字符串中的子串
Stringsubname="in";
System.out.println("子串1:
"+name1.substring(3,10));//输出grammin
System.out.println("子串2:
"+"abc".concat("123"));//输出abc123
System.out.println("子串3:
"+name2.startsWith("Pro"));//输出true
System.out.println("子串4:
"+name2.endsWith("inJava"));//输出true
System.out.println("子串5:
"+name1.indexOf(subname));//输出8
System.out.println("子串6:
"+name1.lastIndexOf(subname));//输出12
//字符串的其他操作
System.out.println("小写:
"+name2.toLowerCase());
//输出programminginjava
System.out.println("大写:
"+name2.toUpperCase());
//输出PROGRAMMINGINJAVA
System.out.println("替换:
"+name1.replace('a','A'));
//输出progrAmminginjAvA
}
}
§2.2.4实践编程
编写以下程序,并在DOS状态下调试通过。
1、找出三个整数中的最大值和最小值。
从两个方案中选择其一可以使用一个if语句,而从三个方案中选择其一可以使用两个if语句。
本例使用了两个并列的if语句,其中第二个if语句没有else子句。
除此之外,还使用了另一种方法(三元条件运算符?
:
)实现同样问题。
2、显示星期几对应的英文字符串。
用week表示星期几,可用switch语句将week转换成对应英文字符串。
3、计算输出Fibonacci前20序列。
用数组编程
Fibonacci序列是指首两项为0、1,以后各项的值是其前两项之和:
0,1,1,2,3,5,8,…
程序运行结果:
01123581321345589144233377610987159725844181
4、求一组数中的最大与最小值。
本例用一维数组来存放以Math.random()方法产生的一组随机数。
程序运行结果:
table:
8440163104928769470
Max=94
Min=3
5、判断回文字符串。
(课外选做)
回文是一种“从前向后读”和“从后向前读”都相同的字符串,如“rotor”是一个回文字符串。
程序中使用了两种算法来判断回文字符串。
算法一:
分别从前向后和从后向前依次获得源串str的一个字符ch1和ch2,比较ch1和ch2,如果不相等,则str肯定不是回文字符串,yes=false,立即退出循环;否则,继续比较,直到str的所有字符全部比较完,yes的值仍为true,才能肯定str是回文字符串。
算法二:
将源串str反转成temp串,再比较两串,如果相等则是回文字符串。
程序中比较两个字符时,使用关系运算符==;而比较两个字符串,则需使用equals()方法。
6、要求:
声明一个RandomNum类,该类包含一个长度为15的int数组array,在构造方法中用随机数对array进行初始化;该类还定义了方法getMaxNum(),该方法返回array中的最大数。
再声明一个DisplayMaxNum类,该类包含main()方法,在main()中调用RandomNum类中的getMaxNum()方法获得最大值,并显示最大值。
提示:
生成随机数用java.lang.Math类中的方法publicstaticdoublerandom()
7、编程Java程序实现以下生活中的问题。
(课外选做)
一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。
甲说:
牌照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:
四位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
车号为:
7744
§2.3类的继承和封装
§2.3.1实验目的、内容及性质
掌握类的定义,类的继承,及相关语法规则,掌握对类成员的使用,理解类的封装。
实验性质:
设计、必做
实验学时:
2学时
§2.3.2问题及思考
1、类的定义,什么是对象,两者之间的区别与联系?
2、什么是构造函数,如何调用?
父类与子类的构造函数关系如何?
3、什么是继承?
子类从父类继承了什么?
4、什么是重载函数,如何体现多态性?
5、什么是包,如何打包?
6、类的高级属性总结如静态、抽象、final等。
7、类的四种访问修饰符总结。
8、什么是接口?
如何实现接口?
§2.3.3实验指导
1、简单类示例
//EmployeeTest.java
importjava.util.*;
publicclassEmployeeTest
{
publicstaticvoidmain(String[]args)
{
//将三个员工对象的数据赋值给职工数组
Employee[]staff=newEmployee[3];
staff[0]=newEmployee("张三",75000,1987,12,15);
staff[1]=newEmployee("李四",50000,1989,10,1);
staff[2]=newEmployee("王五",40000,1990,3,15);
for(inti=0;istaff[i].raiseSalary(5);//每个员工的工资增长5%
for(inti=0;i{
Employeee=staff[i];
System.out.println("姓名="+e.getName()
+",工资="+e.getSalary()
+",工作日期="+e.getHireDay());
}
}
}
classEmployee
{
privateStringname;
privatedoublesalary;
privateDatehireDay;
publicEmployee(Stringn,doubles,
intyear,intmonth,intday)
{
name=n;
salary=s;
GregorianCalendarcalendar
=newGregorianCalendar(year,month-1,day);
//GregorianCalendar计算月份从0开始
hireDay=calendar.get