java经典案例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1.经典案例
✧案例1:完成一个Java中间件软件包的开发、打包、发布和使用∙定义
完成一个Java中间件软件包的开发、打包、发布和使用,要求学员按照以下步骤完成一个Java中间件产品的开发,打包,发布和使用的完整过程:
1,首先在工作目录下建立module1子目录,在该目录下创建Model.java类,并声明包:com.tarena.middle 。
2,使用java –d 命令编译以上程序,检查编译后的目录结构。
3,使用jar命令将编译完成的字节码文件打包。
4,修改CLASSPATH,让其指向上一步中所创建的jar文件。
5,重新写一个类Test.java,(Test类与Model类不在同一个包下)在该类的main方法中使用Model类。
∙说明
1,该案例主要考察以下知识点:编译Java程序,Java程序的包声明,jar命令的使用,CLASSPATH的设置,import的使用等。
2,教师可以在课堂上完整演示本案例,并要求学员在课后独立完成本案例。
3,该案例难度系数:设计级
✧案例2:华氏温度与摄氏温度转换
∙定义
华氏温度与摄氏温度转换,编写一个程序,将华氏温度转换成摄氏温度或将摄氏温度转化成华氏温度。
要求程序运行时从控制台读入温度值及单位,并输出另一种温度值及单位,例如:若用户输入27 C则程序输出81 F;若用户输入96 F,则程序输出36 C(其中C代表摄氏温度,F代表华氏温度),华氏温度与摄氏温度转化的公式为:
C = 5 (F - 32) / 9
F = 9 C / 5 + 32
要求输入的温度值是整数,输出的温度值也是四舍五入后的整数。
∙说明
1,该习题主要考察知识点:变量的定义,控制台输入,算术运算。
2,教师应该讲解怎样使用Scanner做控制台数据的读入,并将此段代码发布给学员。
3,教师应该讲解对double值四舍五入的方法。
4,要求学员能使用Scanner从控制台读取整数,字符串,double等类型的数据。
5,该案例难度系数:程序级
∙说明:
1,该习题主要考察的知识点:控制台输入和复杂的选择流程控制。
2,计算个人所得税时要注意,应纳税所得额要分段计算,即:若某人的本月应纳税所得额为:7800.00元,则其中有500.00元适用税率5%;有1500.00元适用税率10%;有3000.00元适用税率15%;有2800.00元适用税率20%。
则该员工应纳税:500×5%+1500×10%+3000×15%+2800×20%=1185.00元
3,该案例难度系数:程序级
✧案例4:百分制分数和等级制分数的转换
∙定义
百分制分数与等级制分数的转换,编写程序,将一个百分制分数转化为等级制分数并输出出来,转化规则如下:
90分以上 A
80分~89分 B
70分~79分 C
60分~69分 D
60分以下 E
要求百分制分数从控制台读入,并在程序中判断读入的分数值是否有效。
转化后得到的等级制分数输出在控制台。
∙说明:
1,该习题主要考察知识点:控制台输入,多路分支选择结构(switch—case)。
2,教师应启发学生如何设计switch-case
3,该案例难度系数:程序级
✧案例5:猜数字游戏
∙定义
编写程序,实现控制台的猜数字游戏。
游戏运行时产生一个0-1000之间的随机整数,要求用户从控制台输入数字,若输入的数字比产生的数字小,则输出:“太小了,再大一点!”;若输入的数字比产生的数字大,则输出:“太大了,再小一点!”,若输入的数字和产生的数字相等,则输出:“恭喜你猜对了!”然后退出程序;若用户猜了10次还未猜对,则输出:“你太笨了,下次再来吧!”然后退出程序。
∙说明:
1,该案例主要考察的知识点:循环控制,控制台输入和输出,随机数的生成。
2,教师应该讲解随机数产生的方法,并将该代码发布给学员。
3,该案例难度系数:设计级
✧案例6:九九乘法表的输出
∙定义
要求编写程序,在控制台输出九九乘法表,如下图所示:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
……
∙说明:
1,该案例主要考察使用两层循环的嵌套来进行复杂的循环流程的控制。
2,该案例可以作为教学案例,也可以要求学生当作课堂练习完成。
3,该案例难度系数:程序级
✧案例7:输出唐诗
∙定义
用二维数组保存一首唐诗(五言或七言),每一行代表一句,保存格式如下:
剑外忽传收蓟北
初闻涕泪满衣裳
却看妻子愁何在
漫卷诗书喜欲狂
白日放歌须纵酒
青春作伴好还乡
即从巴峡穿巫峡
便下襄阳向洛阳
要求将这首唐诗按照古文的方式输出出来(从右至左,竖行排列),输出格式如下:
便即青白漫却初剑
下从春日卷看闻外
襄巴作放诗妻涕忽
阳峡伴歌书子泪传
向穿好须喜愁满收
洛巫还纵欲何衣蓟
阳峡乡酒狂在裳北
∙说明:
1,该案例主要考察的知识点:二维数组的访问和元素的操作。
2,教师可以画图分析将唐诗按照古文的方式输出时数组元素下标的变换规则。
3,该案例难度系数:设计级
✧案例8:酒店前台客房管理程序
∙定义
某酒店有10层楼,每层楼有12个房间,要求为该酒店设计一套简单的前台房间管理程序,该程序可以通过在命令行输入命令来为客人办理入住和退房手续。
要求该程序支持通过命令行输入以下命令来进行入住,退房及查询的操作:
search :查询所有房间的状态
in 1202 tangliang :姓名为tangliang的客人入住1202房间
out 1202:1202房间退房
quit:退出程序
∙说明
1,该案例主要考察知识点:数组的定义和遍历,两层循环来遍历二维数组。
2,教师可以将程序框架搭建起来,让学员实现其中的部分代码。
3,在本例中要求所有程序代码都写在main方法中。
4,该案例难度系数:架构级
代码:
✧案例9:用数组解决约瑟夫环问题
∙定义
用数组实现约瑟夫出圈问题。
n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。
对于给定的n,m,编写程序求出所有人的出圈顺序。
∙说明:
1,该案例主要考察的知识点:数组的使用和数组元素的操作
2,教师应该详细讲解约瑟夫环的问题模型,以及如何用数组来模拟约瑟夫环的算法。
3,该案例难度系数:设计级
✧案例10:数组排序
∙定义
介绍常用的数组排序方法:冒泡排序或选择排序,让学员至少掌握一种数组排序的方法。
∙说明:
1,该案例让学员至少掌握一种数组排序的算法,对各种排序算法的优劣性有一定了解。
2,讲师讲解各种排序算法的原理,让学员自己实现其中至少一种排序方法的代码。
3,该案例难度系数:程序级
✧案例11:用模块化的设计重构以前的案例(方法的定义和调用)∙定义
∙
1
2
3
∙
1
int
如果雷是-1。
则continue,进行下一次循环,重新查找随机数
2,计算每个位置周围的地雷数
以上一模块产生的随机地雷分布的二维数组为数据来源,计算该二维数组中不是地雷的位置周围的8个位置总共有多少个地雷,将这一数字存储在该位置,产生如下二维数组:
循环访问2为数组,依次拿到2为数组里的数,如果元素为-1,continue,如果元素不是-1,计算该位置周围的8个位置有多少个-1;
左上i-1,j-1
左中i-1.j
左右i-1;j+1
左二1: i,j-1 左二2: ij 左三:i,j+1
3,输出布雷面板:
我们要编写程序完成布雷面板的控制台输出,为了区分布雷面板中哪些位置是已经被用户排开的,哪些位置是未被排开的,我们对以上二维数组的数据定义作如下约定:若该位置保存的数字是n,则n满足如下条件:
1)若0<=n<=8,则表示该位置不是地雷,其周围位置的地雷数就是n,且该位置未被用户排开。
2)若10<=n<=18,则表示该位置不是地雷,其周围位置的地雷数就是n%10,且该位置已经被用户排开。
3)若n==-1,则表示该位置是地雷,并且未被用户标记。
4,用户排雷程序模块
完成以上两个模块后,用户可以完成排雷的操作,我们要编写一个程序来支持用户通过控制台来排除地雷,用户可以在控制台输入坐标位置,来表示排除该位置是地雷。
当用户输入坐标位置后,程序需要执行如下操作:
1)若该坐标位置是地雷(值为-1),则,程序结束,用户排雷失败。
2)若该坐标位置存储的数字是大于0小于等于8的整数(该位置不是地雷,该位置周围地雷数等于该数字,该位置未被用户排开),则将该位置排开(并将该位置的数字+10,表示该位置已经排开),然后重新输出一遍布雷面板。
3)若该坐标位置存储的数字是大于等于10小于等于18的整数(该位置不是地雷,该位置已经被排开),则输出错误信息,请用户重新输入。
4)若该坐标位置存储的数字等于0(该位置不是地雷,该位置周围的8个位置也没有地雷,该位置还未被用户排开),则找该位置的周围8个位置,将其排开,排开时递归的执行排雷程序模块的操作。
说明:
1,该案例可分为四个子案例单独讲解,或作为课堂练习或课后作业让学员完成。
2,其中前三个模块比较简单,要求大多数学员都能独立完成,最后一个模块比较复杂,需要设计方法的递归调用,有基础的学员可以在教师和项目经理的指导下完成。
3,该案例考察了以下知识点:数组的操作,复杂流程的控制,方法的递归调用等。
4,该案例难度系数:架构级
✧案例13:五子棋游戏v1.0(控制台版本)
∙定义
编写程序实现两人互玩的五子棋游戏,游戏开始时要求在控制台输出以下棋盘,然后提示黑方和白方下子,玩家从命令行输入落子坐标,如:a f,表示在a,f坐标落子,其中黑方的子用@表示,白方的子用O表示,空白位置用*表示,每有一方落子,则要重新输出棋盘的状态,程序还要能判断某一方获胜,并终止游戏。
棋盘初始状态:
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 * * * * * * * * * * * * * * * *
1 * * * * * * * * * * * * * * * *
2 * * * * * * * * * * * * * * * *
3 * * * * * * * * * * * * * * * *
4 * * * * * * * * * * * * * * * *
5 * * * * * * * * * * * * * * * *
6 * * * * * * * * * * * * * * * *
7 * * * * * * * * * * * * * * * *
8 * * * * * * * * * * * * * * * *
9 * * * * * * * * * * * * * * * *
a * * * * * * * * * * * * * * * *
b * * * * * * * * * * * * * * * *
c * * * * * * * * * * * * * * * *
d * * * * * * * * * * * * * * * *
e * * * * * * * * * * * * * * * *
f * * * * * * * * * * * * * * * *
1 定义一个字符型的二维数组定义棋盘状态,[16][16],赋初始值,,每个位置*号
输出来
2 读取用户输入,根据黑方坐标把数组中3行6列拿出来看一下,如果是黑色的就落下,如果该位置没有*号,就提示用户该位置有棋子
3 判断每落下一个棋子,程序有没有获胜,如果没有获胜提示白方落子或黑子罗子
4如果5子排列就获胜
说明
1,该案例主要考察的知识点:复杂循环的控制,数组的应用,流程控制解决复杂问题。
2,教师可以讲解如何判断某一方获胜的算法。
3,讲师可以将整个程序分模块,将每个模块的方法定义好,由学员来实现。
4,该案例难度系数:架构级
✧案例14:类的抽象—栈
∙定义
栈是一种常用的数据结构,其特点是存储数据时“先进后出”。
写一个类用来模拟栈这种数据结构,要求底层使用数组存储数据,并给出相应的进栈和出栈的方法。
还要求定义一个测试类,包含主方法,在主方法中测试栈的定义是否正确(生成栈对象,调用栈的方法)。
∙说明
1,该案例主要考察学员抽象数据类型的能力。
2,教师可以启发学生思考,抽象数据类型时如何抽象属性和方法,如何将属性和方法的定义细化。
3,该案例难度系数:设计级
✧案例15:类的抽象—人类
∙定义
写一个类Person,包含以下属性:String name; int age; boolean gender;Person partner。
为Person 类写一个marry(Person p)方法,代表当前对象和p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因。
要求在本类中写一个主方法,来测试以上程序(生成两个Person 对象,并调用它们的marry方法)。
下列情况不能结婚:1,同性;2,未达到结婚年龄,男<22,女<20;3,某一方已婚
∙说明
1,该案例主要考察类的自关联的定义和使用。
2,该案例还可做如下扩展:将int age的定义改为Calendar birthday的定义,要求学员使用Calendar操作日期数据。
3,教师可以借助该案例讲解java.util.Calendar和java.util. GregorianCalendar的使用,让学员熟悉日期数据的处理方法。
4,该案例难度系数:设计级
✧案例16:酒店前台客房管理程序v2.0(面向对象实现)
∙定义
将以前写的酒店房间管理程序按照面向对象的方式重新设计,抽象出以下类:
酒店类:
属性:酒店名称;酒店所有房间的数组。
方法:查询房间状态boolean isEmpty(int roomNumber);
入住boolean checkIn(int rid,String gName),退房boolean checkOut(int rid);
开始运行void start();
∙说明:
1,该案例考察学员面向对象的抽象能力。
2,教师可以指导学员搭建好程序的代码框架,让学员完成方法。
3,该案例难度系数:设计级
✧案例17:继承关系的设计和实现
∙定义
考虑一个具有各种图形类的图形系统,这些图形包括长方形、正方形、三角形、圆形等。
例如,长方形可以有长、宽、中心点等数据,而正方形和圆形可能只有一个中心点和一个边长或半径。
在一个精心设计的图形系统中,这些类应派生于一个公共的类(即Figure类)。
现要求实现这样一个系统。
Figure类是父类。
定义从Figure类继承的Rectangle和Triangle类。
每个类都有erase和draw方法。
draw方法将该图形在控制台输出出来,而erase方法则擦除这些图形(只需清屏,通过输出空行,或者通过执行更复杂的动作)。
∙说明:
1,该案例主要考察的知识点:继承关系的定义,方法的覆盖。
2,该案例难度系数:程序级
✧案例18:接口的应用—DAO模式
∙定义
我们要开发一套通用的网站用户管理程序,该程序主要包含用户注册和用户登录等基本功能。
用户的注册数据可能会存储在不同的介质中(文件或数据库)。
为了让业务程序访问数据时不需要去关注数据的存储介质,我们需要在程序中抽象一个对数据访问的接口,该接口中给出了业务程序可能对数据访问的所有方法的定义。
然后分别写出该接口的两个实现类,从文件和数据库中访问数据。
以我们现在所学的知识,我们暂时还无法去实现这两个类,但我们可以在相应的方法中输出语句来模拟一个实现。
即便这样,我们还是可以定义一个可以真正实现的类,该类从数据访问用户的注册数据。
定义DAO接口,定义2个类,查询和添加方法然后调用该接口中的类
∙说明:
1,该案例描述接口的意义,和使用接口降低耦合。
2,教师可以带领学员完成该案例,并讲解使用接口给整个程序结构带来的好处。
3,该案例难度系数:架构级
✧案例19:字符串的应用—字符串解析
∙定义
Unix机器中用9个字符来表示文件的访问权限,其中前三位表示文件拥有者对文件的权限,中间三位表示同组者对文件的权限,最后三位表示其他人对文件的权限,而每一类不同的角色对文件的权限又分为读(r),写(w)和执行(x)三种权限,如:“rw-r--r--”则表示拥有者具有读和写的权限,同组者和其他人只有读的权限。
同时,我们也可以对权限种类进行编码,如:读=4,写=2,执行=1,这样文件的权限也可以用三位八进制数字来表示,例如:“644”就等价于“rw-r--r--”。
现在要求编写程序将给定的文件权限字符串转换为8进制的编码值,或者将8进制编码值转化为文件权限字符串。
∙说明:
1,该案例考察的知识点:字符串的操作,进制的转换,Integer和String的转化等。
2,教师可以带领学员完成从字符串到8进制数字的转化程序,要求学员自己完成逆向的转化程序。
3,该案例难度系数:设计级
✧案例20:模拟ArrayList的实现—MyArrayList类
∙定义
自己写一个MyArrayList类,实现java.util.ArrayList类的核心功能,要求底层使用数组存储数据,能实现自动扩容,能使用Iterator遍历,实现List接口的常用方法。
∙说明
1,该案例主要考察学员对ArrayList实现原理的掌握,进一步加深面向对象的抽象思想,熟练掌握数组操作。
2,教师可以写出该类的代码框架,让学员实现其中的重要方法。
3,该案例的重点和难点在于add方法中实现数组自动扩容和iterator方法中实现并得到迭代器。
4,该案例难度系数:程序级/设计级
✧案例21:模拟LinkedList类的实现—MyLinkedList类
∙定义
自己写一个MyLinkedList类,实现java.util.LinkedList类的核心功能,要求底层使用链表存储数据,能实现自动扩容,能使用Iterator遍历,实现List接口的常用方法。
∙说明:
1,该案例主要考察学员对链表的实现原理的掌握,进一步加深面向对象的抽象思想,熟练掌握链表的定义和操作。
2,教师可以写出该类的代码框架,让学员实现其中的重要方法。
3,教师应该讲解Java实现链表的基本方法。
4,该案例难度系数:程序级/设计级
✧案例22:反射实现类的动态加载
∙定义
编写如下格式的配置文件,然后根据配置文件的参数加载类,生成实例,设置属性的值,并调用方法,在该案例中假定类一定有无参构造方法,假定属性类型是String,假定方法都是无参的。
CLASS_NAME=tts.cookbook.key22.Student
FIELD_NAME=name
FIELD_V ALUE=zhangsan
METHOD_NAME=study
∙说明
1,该案例主要考察学员对反射的理解,使用反射进行类的动态加载。
2,教师应该讲解使用Properties装载配置文件的方法,并将该段代码发布给学员。
此时并不需要学员理解文件访问的方法。
3,教师可以引导学员思考一下如果没有题目所给的那些假设,如果要访问的属性和方法不止一个,那用Properties格式的配置文件就不能很好的描述了,这时需要一种有层次感能自我说明的数据描述格式—XML。
4,该案例难度系数:架构级
✧案例23:简易计算器的界面设计及实现
∙定义
使用AWT和Swing设计简单的计算器界面,并实现基本的运算功能,如下图所示:
∙说明:
1,该案例主要考察学员对基本图形组件和布局管理器的使用。
2,教师可以讲解多层布局设计的原理和基本方法。
3,教师可以讲解实现运算的基本算法。
4,该案例难度系数:程序级
✧案例24:简易记事本程序的界面设计
∙定义
使用AWT和Swing设计一个类似于windows记事本的程序界面,要求使用菜单。
∙说明:
1,该案例主要考察学员对基本图形组件,布局管理器和程序菜单的设计和使用。
2,教师可以讲解多层布局设计的原理和基本方法。
3,教师可以讲解JFileChooser和JColorChooser的使用。
4,该案例难度系数:程序级/设计级
✧案例25:图形编程中的事件处理案例
∙定义
要求为MouseListener,MouseMotionListener,ItemListener,ChangeListener,WindowListener 写一些实际案例来说明其用法。
1,要求写一个案例,捕捉鼠标在面板上的活动,每当鼠标指针移动时在面板下方动态输出鼠标当前坐标位置。
若用户在面板上点击鼠标,也要输出鼠标的哪个键被点击,以及点
击点的坐标。
2,要求写一个案例,在面板上包含两个下拉列表,省份和城市,要求用户改变省份列表项时,城市的内容同步改变为当前省份的城市。
3,要求写一个案例,使用三个JSlider分别选取R,G,B三原色的值,用户可以通过活动JSlider 的滑块来动态的合成一种颜色,合成的颜色动态显示在界面上。
4,要求写一个案例,显示一个窗体,当用户关闭窗体时弹出对话框询问是否确认关闭。
∙说明:
1,该案例主要考察学员对图形编程的事件处理方式的理解。
2,该案例的主要目的是让学员通过这些案例充实案例库。
3,教师可以讲解某些常用组件及事件的处理方法。
4,该案例难度系数:设计级
✧案例26:使用Java多线程实现倒计时牌
∙定义
开发一个图形界面的倒计时牌程序,程序通过预先输入的目标时间,动态显示当前时间离目标时间相差的天数,小时数,分钟数和秒数,每秒刷新一次。
∙说明
1,该案例主要考察java多线程程序的设计基本方法。
2,教师应该讲解日期数据的处理方式。
3,教师可以讲解实现每秒刷新一次的方法。
4,该案例难度系数:程序级
✧案例27:文件拷贝和加密的实现
∙定义
编写程序,实现简单的文件加密/解密器。
要求在界面中选择文件(使用JFileChooser),并指定加密算子(0~255之间的整数),然后完成对任意文件的加密和解密。
加密过程要求采用两种不同模式实现:
(1)覆盖原文件。
(使用RandomAccessFile来完成)
(2)生成新的加密文件。
(使用FileInputStream和FileOutputStream来完成)
这两种模式可在界面中选择。
对文件的加密规则:将原文件中每个字节与加密算子做异或运算,得到的值做为加密后的文件相应字节上的值。
(解密时规则一样)。
∙说明:
1,该案例考察的知识点:文件的访问,RandomAccessFile。
2,教师可以讲解使用FileInputStream和FileOutputStream方式的实现,让学员完成使用RandomAccessFile方式的实现。
3,该案例的难度系数:程序级
✧案例28:简易记事本程序的实现
∙定义
编写程序实现类似windows记事本的功能,可以使用案例24所做的图形界面,并实现打开文件,保存文件,等基本功能,要求保存文件和打开文件时可以选择不同的字符编码,还要求在打开文件和保存文件时使用使用案例27所实现的文件加密程序对文件加密和解密,使得其他的文字处理软件不能打开本文件。
∙说明
1,该案例考察的知识点:文本文件的处理,字符编码。
2,教师可以讲解字符编码的概念,演示不同字符编码存储的文件的区别。
3,教师可以讲解不同字符编码的转化方式。
4,该案例的难度系数:设计级
✧案例29:简易Web服务程序
∙定义
开发一个简易的web服务程序,程序运行时向客户端写出当前服务器系统时间和客户端的IP地址,以及客户端是第几位访问者。
客户端直接使用浏览器访问。
∙说明:
1,教师简单介绍html标签的语法。
2,教师可以引导学员思考:建立web服务的很多工作都是机械化的与业务无关的,所以可以封装在某个类里面完成,程序员只需要定义与业务相关的代码,这样封装好的类就是servlet类。
3,该案例的难度系数:设计级
✧案例30:广播式聊天室程序的实现
∙定义
要求开发一个广播式的多人在线聊天程序,要求客户端有简单界面。
∙说明
1,该案例主要考察的知识点:java的网络编程,服务器端多线程程序的设计,I/O流的操作和包装。
2,教师可以带领学员搭建整个程序的基本框架,让学员实现其中部分关键代码。
3,该案例难度系数:架构级。