前言:
在此总结一下三次的题目集。各题目集侧重点各有不同,第一次侧重于熟练运用集合与方法,巩固封装性;第二次侧重于熟练正则表达式的运用,理解并根据类图实现聚合;第三次侧重于继承与多态的熟练运用,理解一对多的组合关系。代码量增多,要求越来越多,内容逐步深入,难度渐渐加大,要摆好心态,做好学习前的准备。
设计与分析:
本次分析题目集中的部分题目,从简单到复杂,从“面向过程”到面向对象,下面做简要分析。
一、 菜单计价程序-3
二、 单词统计与排序
其可以用于统计与查询系统,按照每个单词的长度由高到低输出各个单词(重复单词只输出一次),如果单词长度相同,则按照单词的首字母顺序(不区分大小写,首字母相同的比较第二个字母,以此类推)升序输出。
在写这题时,如何去重和不区分大小写比较实现起来有困难,经询问发现去重可以通过将单词添加到一个新列表,根据列表无法存储重复数据来实现;不区分大小写可以用compareToIgnoreCase来实现。此题强化了对列表特性的记忆。
三、 判断两个日期的先后,计算间隔天数、周数
判断两个日期的先后,并输出它们之间间隔的天数、周数(不足一周按0计算)。
题目给出了可以通过查询Java API文档,了解各方法的用法来实现编程。只需去熟悉方法的使用,就能根据题意完成编程,难度并不大。
四、 正则表达式训练-学号校验
对软件学院2020级同学学号进行校验,学号共八位,分为:入学年份,学院代码,方向代码,班级序号,学号。
此题可根据班级序号分成四类来分情况讨论,通过判断各位数字的取值范围来写出正则表达式。整体难度并不难,主要是要熟悉正则表达式的运用。
五、 日期问题面向对象设计(聚合一)
应用程序共测试三个功能:1、求下n天2、求前n天3、求两个日期相差的天数。
此题根据类图编写代码,要根据给出的方法,参数确定用途,并进行合理调用,理清类与类之间的关系。而我认为其中的DateUtil类是关键,因为此题需要实现的功能都在DateUtil类中体现,方法的调用也最复杂,有些地方甚至要多次调用。
六、 日期问题面向对象设计(聚合二)
此题相较于上一题题目要求没有发生改变,只是类图更加强调了DateUtil的功能,所以要重新设计类以满足题目需求。此题加深了我对聚合问题的理解,其中有些小细节,比如根据方法的参数确定年月日时要看清参数传递的位置,日期相减时要看清减数与被减数,相应的方法调用要改进。
七、 继承与多态
此题要求用继承与多态的方法来实现图形类的继承,并定义相应类对象进行测试(求各图形的面积)。
要求并不难,主要是考察对继承与多态的理解与使用,各图形输出面积均要调用方法(实现多态),只要理解了继承与多态这题就不难写,只需将对应方法重写就行。
八、 ATM机类结构设计(一)
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:1、存款、取款功能输入数据格式:卡号 密码 ATM机编号 金额(由一个或多个空格分隔),其中,当金额大于0时,代表取款,否则代表存款;2、查询余额功能输入数据格式:卡号。
此题相关概念均要设计为实体类,业务(控制)类请自行根据实际需要进行扩充和完善。要求为1、务必注意本题目中的各实体类之间的关系,尤其是一对多的组合关系;2、对实体类的设计要做到单一职责原则,且不能缺少规定的实体类;3、编程时考虑面向对象中的封装性本题目中的应用以及是否有能够扩展的衍生需求。
实体类中Bank和Account为重要实体类,其中存储Bank和Card以及ATM列表;业务控制类为计算存取款,余额查询的检查类,余额显示类,存取款检查类,存取款的显示类。在主类中根据输入情况来判断业务情况。此题理解起来并不难,但分析各种情况需要花一点时间,根据单一职责原则来区分各个类的功能,实现组合关系。
九、 ATM机类结构设计(二)
此题相较于上一题题目要求增加了:银行卡包含借记卡和信用卡两类,且允许跨行办理相关业务。