Java教程

java题目集7-9总结

本文主要是介绍java题目集7-9总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言:

一学期的java课程学习已经接近尾声了,从这个课程中我学到许多,我从一开始的面向过程的思想慢慢转变成面向对象的思想,现在我看来,实现不需要重复或修改的功能时用面向过程的思想很好,但一旦涉及到修改,添加新的功能时还是要用面向对象的思想,这不仅可以解决许多看起来十分复杂的问题,还能让这些问题的脉络看起来清晰,而不会像面向过程的思想那样写完只有自己看得懂,甚至几天后自己也忘了怎么写的。

第七次题目集主要知识点是对类的继承、多态性使用方法以及接口的应用,两道题目都在考查这些知识点,并且第二题就是在第一题的基础上进行修改,多实现一个把相同的类发在同一个组里的功能,题量少,但是要想的东西挺多的,总体来说难度并不高,唯一让我觉得有问题的地方就是在sort分类时,我明明写的和老师课上演示的按面积排序的圆代码差不多,我却错了,直到现在我也没搞清楚,后来我直接换成了其他类中的排序方法,才终于写完了这一次题目集。

第八次题目集主要知识点对多个类之间的联系,比如继承,聚合,组合,依赖等,我之前对这几种类之间的关系理解的不是很到位。直到写这一次题目集,我才正视这个问题。我通过自己写一些测试代码和查阅网上的聚合,组合的实例代码,慢慢搞清楚了依赖其实就是在一个类的方法中引用另一个类,甚至不用在自己的属性里加上这么一个类,它们的关联仅仅就是这个方法;聚合其实就是在一个类中要把一个其他类作为他的属性,并且这个类可以说是它的一部分,但没有说没有谁另一个就会不存在;而组合可以说在一个类在另一个中是不可或缺的,它们彼此互相依赖,会互相影响,比如人和心脏;搞清楚这些之后,我写这道题目就十分迅速了,基本没有卡住的地方。

第九次题目集主要知识点是对上一次题目的修改,让它的功能更加丰富,比如可以借贷,可以跨行取钱了,我一开始想的十分简单,后面才发现,这题目里的坑还真不少。总体来说,难度不高,但是十分繁琐,这让我意识到第八次题目集我的代码还是存在不少问题的,比如明明就是加一个功能和修改一个功能,我却修改了太多代码。

 

设计与分析:

①题目集7(7-1)、(7-2)两道题目的递进式设计分析总结

7-1 图形卡片排序游戏 

掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书

输入格式:

  • 首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如: 1 3 4 2 1 3 4 2 1 3 0
  • 然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

输出格式:

  • 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format
  • 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
  1. 排序前的各图形类型及面积,格式为图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;
  2. 排序后的各图形类型及面积,格式同排序前的输出;
  3. 所有图形的面积总和,格式为Sum of area:总面积值

设计的类图 

 

7-2 图形卡片分组游戏 

掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。

输入格式:

  • 在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:1 3 4 2 1 3 4 2 1 3 0

  • 根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

输出格式:

  • 如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出Wrong Format

  • 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:

  1. 排序前的各图形类型及面积,格式为[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前;

  2. 输出分组后的图形类型及面积,格式为[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出;

  3. 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;

  4. 各组中面积之和的最大值输出,格式为The max area:面积值

设计的类图

 

 

 分析:

这两题几乎是一样的,唯一的不同之处就是第二题要分组排序,这样我们就可以吧第一题看做分组排序中的一种,就是最简单的一组分组排序,在第一题中,我们就定义了一个数组,多组的话就定义多个数组,先把同一组的图形归类到同一个分组里,再对那个组里的图形根据面积大小进行排序。解决了这点后,这两题基本就是一样的了。总体来说难度并不高,唯一让我觉得有问题的地方就是在sort分类时,我明明写的和老师课上演示的按面积排序的圆代码差不多,我却错了,直到现在我也没搞清楚,后来我直接换成了其他类中的排序方法,才终于写完了这一次题目集。

②题目集8和题目集9两道ATM机仿真题目的设计思路分析总结

7-3 ATM机类结构设计(一)

设计ATM仿真系统,具体要求参见作业说明。

输入格式:

每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:

  • 存款、取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔), 其中,当金额大于0时,代表取款,否则代表存款。

  • 查询余额功能输入数据格式: 卡号

输出格式:

①输入错误处理

  • 如果输入卡号不存在,则输出Sorry,this card does not exist.

  • 如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.

  • 如果输入银行卡密码错误,则输出Sorry,your password is wrong.

  • 如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.

  • 如果检测为跨行存取款,则输出Sorry,cross-bank withdrawal is not supported.

②取款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

③存款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上存款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

④查询余额业务输出

¥[金额]

金额保留两位小数。

设计的类图

 

 

7-1 ATM机类结构设计(二)

设计ATM仿真系统,具体要求参见作业说明。

输入格式:

每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:

  • 取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔)

  • 查询余额功能输入数据格式: 卡号

输出格式:

①输入错误处理

  • 如果输入卡号不存在,则输出Sorry,this card does not exist.

  • 如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.

  • 如果输入银行卡密码错误,则输出Sorry,your password is wrong.

  • 如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.

②取款业务输出

输出共两行,格式分别为:

业务:取款 [用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

③查询余额业务输出

业务:查询余额 ¥[金额]

金额保留两位小数。

设计的类图

 

 

 

 

分析:

第一题考查对多个类之间的联系,比如继承,聚合,组合,依赖等,我之前对这几种类之间的关系理解的不是很到位。直到写这题,我才正视这个问题。我通过自己写一些测试代码和查阅网上的聚合,组合的实例代码,慢慢搞清楚了依赖其实就是在一个类的方法中引用另一个类,甚至不用在自己的属性里加上这么一个类,它们的关联仅仅就是这个方法;聚合其实就是在一个类中要把一个其他类作为他的属性,并且这个类可以说是它的一部分,但没有说没有谁另一个就会不存在;而组合可以说在一个类在另一个中是不可或缺的,它们彼此互相依赖,会互相影响,比如人和心脏;搞清楚这些之后,我写这道题目就十分迅速了,基本没有卡住的地方。第二题是对上一次题目的修改,让它的功能更加丰富,比如可以借贷,可以跨行取钱了,我一开始想的十分简单,后面才发现,这题目里的坑还真不少。总体来说,难度不高,但是十分繁琐,这让我意识到第一题我的代码还是存在不少问题的,比如明明就是加一个功能和修改一个功能,我却修改了太多代码。

改进建议:

这几次题目集让我认识到了我存在的许多问题,比如代码的可重复性不高,有时耦合性又太高,导致修改起来时又十分复杂,我也学到了许多的新知识,知道了类之间的关联到底是咋样的,java的学习差不多告一段落了,接下来要的就是不断更新对其中的概念的理解,争取做到会写代码也可以清晰的理清代码深层的联系,并不断改进和完善代码中各个类之间的关系。

总结:

通过最后一个阶段的联系,我更加加深了对依赖,聚合,组合的理解,并能用代码实现这些关联,运用了更多之前没用过的类和许多方法,对数组的使用上也更加熟练了。

这个学期的java课程已经结束了,这门课程也没有想象中的困难,在以后的学习中,也要多写java代码,争取把这门语言真正掌握,并且希望我以后运用java的时候可以得心应手。我认为老师教的方式挺好,可以边学边写。

这篇关于java题目集7-9总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!