oop第三次博客总结
oop第三次博客总结
一、前言
㈠:第七次题目集题量、难度、知识点总结情况
①:知识点总结情况
7-1主要考察了继承、多态的应用,ArrayList泛型的应用方法以及Comparable接口及泛型的应用,单一职责原则的应用,“开-闭”原则的应用以及一些排序方法的应用和输出格式固定的方法。
7-2在7-1的基础上进一步考察了类的继承、多态性使用方法和接口的应用以及固定格式输出。
②:题目集难度:
7-2在7-1的基础上进行递进 总体来说题目集更注重方法的考察 并没有在算法上面为难 而且在指导书上给了思路提示所以难度并不是很大
③:题量
题量很小 但对方法的理解与掌握帮助很大
㈡:第八次题目集题量、难度、知识点总结情况
①:知识点总结情况
7-1主要考查了类间关系应该如何设定尤其是一对多的组合关系,在设计实体类的时候能否满足单一职责原则
②:题目集难度:
本题的题目难度我认为大概分为三个方面 1、如何设计一对多的组合关系
2、初始化信息时应该如何储存
3、如果我知道银行卡的卡号 我该如何找到其对应的ATM机所在银行 所在账户隶属于谁
③:题量:一道题题量小 但难度稍有提升
㈢:第九次题目集题量、难度、知识点总结情况
①:知识点总结情况
7-1主要是在上次作业中的7-1进行迭代,增加了借记卡和信用卡还有跨行问题 考察了抽象类、继承与多态以及类间关系的设定还有单一职责原则
②:题目集难度:
本题的题目难度我认为大概分为两个方面 1、如何设计才能再输入卡号以后知道卡属于借记卡还是信用卡
2、在取钱过程中如何能尽量减少选择语句的使用
③:题量:一道题题量小 但难度有提升
二、设计与分析:
①题目集七(7-1 7-2)
在7-1时主要只是一个comparable接口的使用 以及ArrayList工具类的使用 但在7-2当中不仅使用了7-1所用的东西 还应该在使用一个接口那就是comparator,它们之间的相同点是Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的 但因为7-1的设计只是将排序后的各图形类型及面积,格式同排序前的以及所有图形的面积总和的输出,它是属于在集合内部定义的方法实现的排序所以使用comparable接口 ,但是在7-2当中在输出上各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出 以及各组中面积之和的最大值输出我认为他们属于集合外部类进行比较 就是几个类间又要进行比较 在7-1的基础上comparable已经实现了内部的排序 在不破坏“开-闭”原则的基础上 又要进行排序 最好的方法是实现Comparator接口用来进行比较。递进式的设计让人更好掌握两个接口的相同点与不同点 以及在什么情况下运用不同的接口 以下是复杂度分析与类图对比
7-1
7-2
可以看到圈复杂度并没有发生变化 但是由于比较的时候我使用的是for循环 没有用到接口比较和arraylist工具类 所以我的代码行数很长
这是类图


②题目集八、题目集九设计思路
题目集八与题目集九属于一个设计思路 在设计之初首先要搞清楚的就是类间的关系和那些类是实体类那些类是业务类 本题的处理方法与雨刷实例有很多相似之处 首先在实验书上给了很多的提示 中国银联类似于业务类 用来处理这些类间关系 根据提示书 我要开始设计的组合关系是 银行与ATM和用户组合 账户与卡进行组合 用户在与账户进行组合 整个都是链式的用户组合 设计一个初始化的类用来存放数据 然后根据链式结构一层一层的储存数据 但是后来经过老师的讲解我发现我在类间关系设定上面存在一定的问题 比如用户应该与账户进行组合 账户才应该与银行组合 用户与账户之间不应该存在关系 之前的设计虽然能够实现该程序 但在类间关系上存在漏洞 题目集九在题目集八的前提下增加了信用卡 与透支收费等问题 在设计的时候除了应该考虑类间关系的设定 也要注意在类当中应该实行“开-闭”原则和单一职责原则 一个类只能干一件事 并且做出的类不能修改 因此 卡分为借记卡和信用卡 账户分为信用账户和信用账户 所以这又考察到了继承关系 在继承关系当中还要想到如何让系统给出一个卡号就能识别出那个是信用卡那个是借记卡 所以我在存放的时候对借记卡和信用卡进行了区别 在初始化的时候 我就将他们分好了类别 但违背了开闭原则 虽然我经常违背这个原则 主要是我不知道如何合理的利用类间关系 增加类来达到目的 在进行算法计算时 我们之前做过的一道账户题就提供了类似的思路 接下来是我的类图 由于我在题目集八的基础上更改了类间关系 所以下面分别是题目集八与题目集九的类图与圈复杂度分析
第八次
第九次
可以从圈复杂度分析可以看出来 因为第二次在老师的基础上改 圈复杂度降低了 并且也在一定程度上实行了单一职责原则


三、采坑心得:
1、题目集七7-1:
① 在输出的时候格式错误 只能输出wrong format 主要时我不会应用toString来固定格式 所以经常要用输出来固定格式

后来我固定了输出的格式

②我采用的是冒泡排序法比较 后面几个点经常不过 所以我查了一下冒泡排序 结果从小到大排序 与题目规定正好相反
③我再进行修改时发现只有圆的时候和多个图形测试总归是不会过 后来我改成了r>=0就可以通过测试点 但我始终没想明白为什么园的半径可以为零但是其他的图形却不可以
④我对while循环与switch的应用还是不熟悉 在选择模式的时候 我一开始并不知道要如何能选择好模式以后 就输入半径来进行计算 所以选择了switch与for循环结合
2、题目集七7-2:
①因为是在题目集7-1上的递进关系 所以在大方向上并没有犯什么错误 主要是在输出格式上和比较上卡壳了 首先在输出格式上 我不知道如何控制按照输出要求那样 而且在不同条件下有不同的输出问题 所以这次我的解决还是利用输出来解决问题 而且每一次的计算与排序我都运到用了冒泡排序并没有利用ArrayList工具类 也没有运用collection 在接口的使用上也出现了错误
interface Comparable {
public int compareTo(double x,double y);
}
3、题目集八7-1:
①本题我所遇到的问题就是初始化错误问题 我打错了一个卡号 所以导致几个点一直过不去

②在传参上我也遇到了问题 在比较是否跨行和查询卡号是否错误时候在传参时 我默认了密码就是8888888 所以我就直接将密码传进来 并将类内部的keyword赋值为8888888 但传进来的password也变成了88888888 所以根本检测不出来密码错误因此我将密码错误检测改为
public boolean validate1(Account account) {
for(int i = 0;i<account.getList().size();i++) {
if(keywords.equals(account.getList().get(i).getKeywords())==true) {
return true;
}
}
return false;
}
③在进行有下到上的查找的时候 我一直没有办法查找 虽然在储存信息上储存进去了 但就是没有办法进行查找 所以debug 因为声明了新的业务类 并没有对业务类进行返回 所以在主类当中他们的储存的信息就是空 所以我在业务类做了修改 也在主类进行了修改


这样就可以进行正常的进行查找
④因为要检测#才算停止 而且单个卡号查询余额时不需要输入密码 但是我又不会进行区分 所以我采用了比较偷懒的方法就是检测他的密码是不是警号 如果是警号就输出余额 但后来看了老师的方法才知道可以进行字符串分割
4.题目集八7-1:
①本题我所遇到的问题就是初始化错误问题 我打错了一个卡号 多加了一个空格 导致最后一个点一直过不去
②在校验是否跨行时候我也出现了问题 我用它的初始化的每一个信息都与传进来的进行对比 但是我两个位置放反了 所以一直检测不出来是否跨行 后来改正如下

③在编写代码时 跨行收取手续费时候 我在跨行的时候减去了手续费 然后后期在透支的时候 又减了一遍跨行 所以我改了只算了他们的手续费 最后一起算余额
if (aTM.AcrossATM(account.getBank())==false) {
if(aTM.getATMID().matches("0[1-4]")) {
taxes = 0.02*amount;
}
if(aTM.getATMID().matches("0[5-6]")) {
taxes = 0.03*amount;
}
if(aTM.getATMID().matches("0[7-9]||1[0-1]")) {
taxes = 0.04*amount;
}
}
④在计算透支额度时 我总是多收费 就是在卡里还有余额的时候并没有把卡里的余额减去在在透支基础上收取费用 所以我在算法上做了改动

四、改进建议
1、减少if else语句的使用 在遇到问题时每次最先想到的就是条件语句
2、对类间的单一职责原则 和开闭原则还是使用的不到位 也可能是理解得不够透彻不知道该如何使用
3、加强对一些接口和ArrayList工具类的使用 学会while switch 等使用
4、提高自己逻辑性和严谨性 每次的代码都要因为不够严谨而出错尤其是初始化
五、总结
1、通过本月的训练 主要加强了我对一些java中方便的一些工具类和方法进行实现 比如collection排序的使用
2、对继承多态进一步的理解
3、掌握了toString的固定输出格式
4、对泛型应用方法掌握更具体了
5、组合关系该如何写 并且什么情况下是组合关系 怎么由小找到大 可以利用迭代器进行查找

浙公网安备 33010602011771号