高级java实验指导书.docx
- 文档编号:28336660
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:45
- 大小:130.18KB
高级java实验指导书.docx
《高级java实验指导书.docx》由会员分享,可在线阅读,更多相关《高级java实验指导书.docx(45页珍藏版)》请在冰豆网上搜索。
高级java实验指导书
高级java程序设计实验指导书
指导老师:
胡晓鹏
信息工程学院
第一部分上机实验的目的及要求
1.1上机实验的目的
《高级java程序设计》是计算机科学与技术专业的一门专业限选课,课程开设的目的就是帮助学生建立面向对象编程的基本思想。
通过本课程的学习,使学生在短时间内理解java面向对象编程的基本原则,以及对java数据库编程、WEB服务器编程有一个基本的了解,并为后继课程打下坚实的理论基础和编程基础。
实验课是本门课程的重要环节。
实验内容以验证性实验和设计性实验相结合为主,以综合性实验为辅。
实验过程中要求使用JAVA语言独立进行编程和调试。
通过实验主要要达到下述目的:
1、加深对面向对象编程思想的理解。
2、熟悉JAVA语言的语言要素,通过大量的验证性实验,巩固学生在理论课上所学的知识点。
3、通过大量的实验编写来提高学生对程序的编写、调试、连接、运行全过程,积累程序调试经验。
4、学习如何系统的设计程序、使学生逐渐建立程序设计的系统观,养成良好的编程习惯和编程风格。
1.2上机实验基本要求
学生在实验前必须做好上机的各项准备,按教师的要求进行上机实验。
具体要求如下:
1、根据实验指导书提前做好上机预习。
程序可以是由教师布置安排的或是自编的。
自编程序应书写整齐,并经人工检查无误,以提高上机效率。
对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意。
2、必须携带教材和相关参考资料上机。
3、调试程序的过程应独立完成。
独立上机是学生独立思维能力独自动手能力的一个重要途径,上机过程中出现的问题,一般应由学生独立处理,不要轻易举手问老师或周围同学。
对常见的“出错信息”应尽快熟悉其含义,并在总结经验的基础上迅速排出常见的错误。
4、在程序调试通过运行成功后,应及时做好程序清单和运行结果的记录,实验结束后及时填写实验报告。
实验报告应包括如下内容:
(1)实验时间
(2)实验内容
(3)源程序清单
(4)运行结果及分析结论
实验报告要求记录程序调试中出现的错误提示。
(英文、中文对照),若有没通过的程序,分析原因。
5、上机过程中严格遵守实验室纪律,养成良好的上机习惯。
第二部分实验内容
实验一设计模式
一、实验目的与要求
使用Java面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括策略模式、访问者模式、适配器模式。
二、实验内容
使用Java面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括策略模式、访问者模式、适配器模式。
包括根据实例绘制相应的模式结构图、编写模式实现代码,运行并测试模式实例代码。
三、实验步骤
1.绘制策略模式结构图并用Java面向对象编程语言实现该模式;
问题描述:
某商家的洗衣机准备818搞活动,进行促销,有几种促销手段:
(1)满300减50
(2)打8折
(3)打9折基础上,折后价满200减20
现在要画出类图并编写源码,实现输出洗衣机在818活动时的价格。
目标:
请用strategy模式设计解决方案。
方案要能够使得在销售洗衣机(即使是同一种洗衣机)时可以灵活的选用价格计算方法,并且可以很容易地增加或修改价格计算方法而不至于对整个系统的维护造成困难。
2.绘制访问者模式结构图并用Java面向对象编程语言实现该模式;
3.绘制适配器模式结构图并用Java面向对象编程语言实现该模式;
各种模式实例的内容可参考教材第8章中的设计模式实例,也可根据自己对该设计模式的理解,自行设计模式结构图并用Java实现。
四、选作题目
1.绘制装饰模式结构图并用Java面向对象编程语言实现该模式;
2.绘制外观模式结构图并用Java面向对象编程语言实现该模式;
3.绘制模板方法模式结构图并用Java面向对象编程语言实现该模式;
实验二常用实用类
一、实验目的与要求
1、掌握String类的常用方法
2、掌握Date类以及Calendar类的常用方法
3、掌握接BigInteger类的常用方法
4、掌握怎样使用Pattern类和Match类检索字符串
二、实验内容
根据实验步骤里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1)实验2-1检索图书
2)实验2-2购物小票
3)实验2-3比较日期
4)实验2-4处理大整数
5)实验2-5替换IP
6)实验2-6String类的常用方法
三、实验步骤
实验2-1检索图书
模板代码
FindMess.java
publicclassFindMess{
publicstaticvoidmain(String[]args){
Stringmess="书名:
Java程序设计,出版社时间:
2011.10.01,"+"出版社:
清华大学出版社,价格:
29.8元,页数:
389页";
if(【代码1】){//判断mess中是否含有"程序"
System.out.println("图书信息包含有\"程序\"");
}
intindex=//【代码2】//mess调用indexOf(Strings)返回mess中第2个冒号的位置
Stringdate=mess.substring(index+1,index+11);
System.out.println(date);
intpricePosition=//【代码3】//mess调用indexOf(Strings)返回首次出现"价格"的位置
intendPosition=mess.indexOf("元");
StringpriceMess=mess.substring(pricePosition+3,endPosition);
System.out.println("图书价格"+priceMess);
doubleprice=Double.parseDouble(priceMess);
if(price>=29){
System.out.println("图书价格"+price+"大于或等于29元");
}else{
System.out.println("图书价格"+price+"小于29元");
}
index=//【代码4】//mess调用laseIndexOf(Strings,intstart)返回最后1个冒号的位置
endPosition=mess.lastIndexOf("页");
StringpageMess=mess.substring(index+1,endPosition);
intp=Integer.parseInt(pageMess);
if(p>=360){
System.out.println("图书价格"+p+"大于或等于360");
}else{
System.out.println("图书价格"+p+"小于360");
}
}
}
实验2-2购物小票
模板代码
FoundPrice.java
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassFoundPrice{
publicstaticvoidmain(String[]args){
Strings="牛奶:
89.8元,香肠:
12.9元,啤酒:
69元,巧克力:
132元";
Stringregex=//【代码1】//匹配数字与小数点的正则表达式的字符串
intnumber=0;
doublesum=0.0;
Patternp=//【代码2】//使用regex初始化模式对象pattern
Matcherm=p.matcher(s);
while(m.find()){
System.out.println(m.group());
number=number+1;
try{
sum=sum+//【代码3】//获取子匹配成功结果字符串并转成Double型类
}
catch(NumberFormatExceptione){
System.out.println(e.getMessage());
}
}
System.out.println("购物小票中的商品种类:
"+number+"种");
System.out.println("购物小票中的价格总额:
"+sum+"元");
}
}
实验2-3比较日期
模板代码
CompareDate.java
importjava.util.*;
publicclassCompareDate{
publicstaticvoidmain(Stringargs[]){
Scannerscanner=newScanner(System.in);
System.out.println("输入第一个年,月,日数据");
System.out.print("输入年份");
shortyearOne=scanner.nextShort();
System.out.print("输入月份");
bytemonthOne=scanner.nextByte();
System.out.print("输入日份");
bytedayOne=scanner.nextByte();
System.out.println("输入第二个年,月,日数据");
System.out.print("输入年份");
shortyearTwo=scanner.nextShort();
System.out.print("输入月份");
bytemonthTwo=scanner.nextByte();
System.out.print("输入日份");
bytedayTwo=scanner.nextByte();
Calendarcalendar=//【代码1】//初始化日历对象
//【代码2】//将calendar的时间设置为yearOne年monthOne月dayOne日
longtimeOne=//【代码3】//calendar表示的时间转换成毫秒
calendar.set(yearTwo,monthTwo-1,dayTwo);
longtimeTwo=calendar.getTimeInMillis();
Datedate1=//【代码4】//用timeOne做参数构造date1
Datedate2=newDate(timeTwo);
if(date2.equals(date1))
{
System.out.println("两个日期的年、月、日完全相同");
}
elseif(date2.after(date1))
{
System.out.println("您输入的第二个日期大于第一个日期");
}
elseif(date2.before(date1))
{
System.out.println("您输入的第二个日期小于第一个日期");
}
longdays=//【代码5】//使用timeOne,timeTwo计算两个日期相隔天数
System.out.println(yearOne+"年"+monthOne+"月"+dayOne+"日和"
+yearTwo+"年"+monthTwo+"月"+dayTwo+"相隔"+days+"天");
}
}
实验2-4处理大整数
模板代码
HandleBigInteger.java
importjava.math.*;
publicclassHandleBigInteger{
publicstaticvoidmain(Stringargs[]){
BigIntegern1=newBigInteger("987654321987654321987654321"),
n2=newBigInteger("123456789123456789123456789"),
result=null;
result=//【代码1】//n1和n2做加法运算
System.out.println("和:
"+result.toString());
result=//【代码2】//n1和n2做减法运算
System.out.println("差:
"+result.toString());
result=//【代码3】//n1和n2做乘法运算
System.out.println("积:
"+result.toString());
result=//【代码4】//n1和n2做除法运算
System.out.println("商:
"+result.toString());
BigIntegerm=newBigInteger("1968957"),
COUNT=newBigInteger("0"),
ONE=newBigInteger("1"),
TWO=newBigInteger("2");
System.out.println(m.toString()+"的因子有:
");
for(BigIntegeri=TWO;pareTo(m)<0;i=i.add(ONE)){
if((n1.remainder(i).compareTo(BigInteger.ZERO))==0){
COUNT=COUNT.add(ONE);
System.out.print(""+i.toString());
}
}
System.out.println("");
System.out.println(m.toString()+"一共有"+COUNT.toString()+"个因子");
}
}
实验2-5替换IP
模板代码
ReplaceErrorWord.java
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassReplaceErrorWord{
publicstaticvoidmain(String[]args){
Stringstr="登录网站:
222.128.89.253";
Patternpattern;
Matchermatcher;
Stringregex="[\\d]{1,3}[.][\\d]{1,3}[.][\\d]{1,3}[.][\\d]{1,3}";
pattern=//【代码1】//使用regex初始化模式对象pattern
matcher=//【代码2】//得到检索str的匹配对象matcher
StringIP="";
while(matcher.find()){
IP=matcher.group();
System.out.print(matcher.start()+"位置出现:
");
System.out.println(IP);
}
System.out.printf("将%s替换为202.192.78.56\n",IP);
Stringresult=matcher.replaceAll("202.192.78.56");
System.out.println(result);
}
}
实验2-6String类的常用方法
模板代码
StringExample.java
classStringExample
{publicstaticvoidmain(Stringargs[])
{Strings1=newString("youareastudent"),
s2=newString("howareyou");
if(【代码1】)//使用equals方法判断s1与s2是否相同
{
System.out.println("s1与s2相同");
}
else
{
System.out.println("s1与s2不相同");
}
Strings3=newString("22030219851022024");
if(【代码2】)//判断s3的前缀是否是“220302”。
{
System.out.println("吉林省的身份证");
}
Strings4=newString("你"),
s5=newString("我");
if(【代码3】)//按着字典序s4大于s5的表达式。
{
System.out.println("按字典序s4大于s5");
}
else
{
System.out.println("按字典序s4小于s5");
}
intposition=0;
Stringpath="c:
\\java\\jsp\\A.java";
position=【代码5】//获取path中最后出现目录分隔符号的位置
System.out.println("c:
\\java\\jsp\\A.java中最后出现\\的位置:
"+position);
StringfileName=【代码6】//获取path中“A.java”子字符串。
System.out.println("c:
\\java\\jsp\\A.java中含有的文件名:
"+fileName);
Strings6=newString("100"),
s7=newString("123.678");
intn1=【代码7】//将s6转化成int型数据。
doublen2=【代码8】//将s7转化成double型数据。
doublem=n1+n2;
System.out.println(m);
Strings8=【代码9】//String调用valuOf(intn)方法将m转化为字符串对象
position=s8.indexOf(".");
Stringtemp=s8.substring(position+1);
System.out.println("数字"+m+"有"+temp.length()+"位小数");
Strings9=newString("ABCDEF");
chara[]=【代码10】//将s8存放到数组a中。
for(inti=a.length-1;i>=0;i--)
{
System.out.print(""+a[i]);
}
}
}
四、选作题目
计算某年、某月、某日和某年、某月、某日之间的天数间隔。
要求年、月、日通过main方法的参数传递到程序中。
实验三输入与输出流
一、实验目的
掌握使用输入输出流进行文件的读写操作。
二、实验内容
根据实验步骤里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1)实验3-1实现文件加密
2)实验3-2给文件的内容添加行号
三、实验步骤
实验3-1实现文件加密
下面程序实现功能:
将已存在的文本文件加密后存入另一个文本文件中。
请将【代码1】~【代码6】替换为Java程序代码。
SecretExample.java
importjava.io.*;
publicclassSecretExample
{
publicstaticvoidmain(Stringargs[])
{
FilefileOne=newFile("hello.txt"),
fileTwo=newFile("hello.secret");
charb[]=newchar[100];
try{
FileReaderin=【代码1】//创建指向fileOne的字符输入流
FileWriterout=【代码2】//创建指向fileTwo字符输出流
intn=-1;
while((n=in.read(b))!
=-1)
{
for(inti=0;i { b[i]=(char)(b[i]^'a'); } 【代码3】//out将数组b的前n单元写到文件 } 【代码3】//out关闭 in=【代码4】//创建指向fileTwo的字符输入流 System.out.println("加密后的文件内容: "); while((n=in.read(b))! =-1) { Stringstr=newString(b,0,n); System.out.println(str); } in=【代码5】//创建指向fileTwo的字符输入流 System.out.println("解密后的文件内容: "); while((n=in.read(b))! =-1) { for(inti=0;i { b[i]=(char)(b[i]^'a'); } System.out.printf(newString(b,0,n)); } 【代码6】//in关闭 } catch(IOExceptione) { System.out.println(e); } } } 实验3-2给文件的内容添加行号 下面程序实现功能: 给文件的内容添加行号。 请将【代码1】~【代码14】替换为Java程序代码。 ReadExample.java importjava.io.*; publicclassReadExample { publicstaticvoidmain(Stringargs[]) { Filefile=newFile("c: /1000","hello.txt"); FiletempFile=newFile("temp.text"); try{ FileReaderinOne=【代码1】//创建指向文件file的输入流 BufferedReaderinTwo=【代码2】//创建指向inOnefile的输入流 FileWritertofile=【代码3】//创建指向文件tempFile的输出流 BufferedWriterout=【代码4】//创建指向tofile的输出流 Strings=null; inti=0; s=【代码5】//inTwo读取一行 while(s! =null) { i++; out.write(i+""+s); out.newLine(); s=【代码6】//inTwo读取一行 } inOne.close(); inTwo.close(); out.flush(); o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 java 实验 指导书