第三次博客
前言:
第七次作业知识点:类的继承、多态性使用方法以及Comparable 接口的应用。
题量:只有两道题,题量较少
难度:我感觉不是很难也不是很简单
第八次作业知识点:没有特别考核的地方但较为考验做题人的综合性和逻辑性
题量:只有一道题,nice
难度:偏高
第九次作业知识点:与第八次类似
题量:只有一道题,nice
难度:偏高
分析:
第七次作业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图形名称2:面积值2 …图形名称n:面积值n,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; - 排序后的各图形类型及面积,格式同排序前的输出;
- 所有图形的面积总和,格式为
Sum of area:总面积值。
类图:

圈复杂度:

分析:本题需要创建多个对象并且进行对象属性值的比较,所以第一时间想到的就是用ArrayList方法来进行储存和比较排序,而且需要在Card类中实现CompareTo()接口方法,再结合ArrayList方法,题目就变得思路明确了。
踩坑心得:刚开始一直测试有问题,后来仔细看了输入输出,才发现,是在把数字全部输入完成之后再来进行检测数字的合理性并判断是否进行下一步,而我是在输入与检测同步进行,检测到错误后立即停止输入并结束,与题意不符,后来修改之后才解决问题,果然要仔细看题目要求啊。
CompareTo()代码部分:
public int compareTo(Card card)
{
if(this.getShape().getArea() > card.getShape().getArea()){
return 1;
}
else if(this.getShape().getArea() < card.getShape().getArea()){
return -1;
}
return 0;
}
第七次作业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图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前; - 输出分组后的图形类型及面积,格式为
[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出; - 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
- 各组中面积之和的最大值输出,格式为
The max area:面积值。
类图:

圈复杂度:

分析:本题与7-1相差不大,只是改了部分功能,加了一个同类型卡片分组功能,将同类型的卡片进行分组后再排序输出即,再求出分组后的总面积与其他分组进行比较,得到最大值。
7-1与7-2递进式分析总结:
在题7-1到题7-2中,由于72中多了一个将同类型的卡片进行分组的要求,所以我创建了多个DealCardList对象,将不同的类型的卡片存入不同的组中,其他的地方都没有发生什么变化,延续了7-1的求法。
第八次作业7-3ATM机类结构设计(一)
输入格式:
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
- 存款、取款功能输入数据格式:
卡号 密码 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编号]上存款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
④查询余额业务输出
¥[金额]
金额保留两位小数
类图:

圈复杂度:

分析:本题内容较为繁琐,我设了三个类,银行、账户和卡号,卡号里有账户和银行这个属性,可以以此来判断是否属于哪个账户以及属于哪家银行,银行里又设置了本银行下属的ATM机;先根据给予的数据来进行客户的初始化,即创建卡后并录入信息,客户进行查询存款取款都是通过调用卡号类来直接实现。
踩坑心得:一定要仔细看题目初始化的数据,我一直潜意识就认为一张卡号一个初始化金额,但是,在测试阶段一直过不去后才发现,是一个账户一个初始化金额,账户下的所有卡号共用一万元!!!
第九次作业7-1ATM机类结构设计(二)
输入格式:
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
- 取款功能输入数据格式:
卡号 密码 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编号]上取款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
③查询余额业务输出
业务:查询余额 ¥[金额]
金额保留两位小数。
类图:

圈复杂度:

分析:在上题中的账户类中加入了一个标识属性accountking,以此来区分借记卡与贷记卡的区别,其他类似。
踩坑心得:还是粗心,有两个测试点一直过不去,竟然是初始数据录入错误!!!
两次ATM机设计思路总结:按照下面这张图片,我是以卡号为主要的功能类,大部分功能都是在卡号类里面实现的,而账户类和银行类大多数只是起了一个标识作用,即区分卡号类。

总结:在这最后三次作业中我学到了不少新的知识和解题思路,特别是最后面两次作业,虽然没有什么新知识点,但要解决的话需要有很清晰的解题思路,很锻炼我们的逻辑思考能力,非常好,最后一次博客了,就没有什么其他的意见了。
public int compareTo(Card card) { if(this.getShape().getArea() > card.getShape().getArea()){return 1;}else if(this.getShape().getArea() < card.getShape().getArea()){return -1;}return 0; }

浙公网安备 33010602011771号