首页 > 其他分享 >PTA题目集阶段总结(2)

PTA题目集阶段总结(2)

时间:2023-04-30 13:44:46浏览次数:34  
标签:总结 题目 训练 int 类图 PTA 如下 OOP Java

一、前言

OOP训练集04:

  7题,第1题难度较大,第7题考查了较多的知识,也比较难;主要考察了Set、List和Java三大特性之一的封装性,并教我们学着查询Java API文档,了解Scanner类、String类、Integer类、LocalDate类、ChronoUnit类中各种单位的用法和规则。

OOP训练集05:

  6题,难度一般;主要考察了正则表达式和日期类聚合。

OOP训练集06:

  5题,第3题和第5题难度较大;主要考察了Java的另外两大特性之继承和多态、Java 中的字符串处理类以及正则表达式,最重要的是,本次题目集的第4、5题,没有给出相应的类图,考查了我们的程序设计能力。

 

二、设计与分析

OOP训练集04 7-1

这题我没有写出来,参考其他人的源码得到了如下的类图,然后我大概明白了老师说的不符合结构的源码是长什么样子的:

 

1.本题输入比较复杂,根据题目提供的一些类一层层来写 ;

2.可以使用静态类来写。

 

 

OOP训练集05 7-5 日期问题面向对象设计(聚合一)

 

本题给出了类图,按照类图对原来的代码进行一些改正就行,不过需要注意几点问题:

 

 

OOP训练集05 7-6 日期问题面向对象设计(聚合二)

本题也给出了类图,根据第5题的源码和类图相应改写就行,不过这题里的调用比第5题简单多了,需要注意一个问题,第5题和第6题中都要先将当前日期的三个值:

 

OOP训练集06 7-4

本题需要自己设计,各个类的关系都要考虑到,这部分比较麻烦,我的类图如下:

 

 

 

 

OOP训练集06 7-5

本题在原来的基础上添加了一些信息,但删去了存款功能,只保留了取款和查询功能,这一题的类图如下:

 

 

 

 

 

三、采坑心得

OOP训练集05 7-5

 

1.开始写的如下,结果导致一直输出“Wrong Format!”:

 

 

 

 

后面改成了这样,才能正确运行: 

 

 

 

 

开始没想通为什么会这样,写到后面突然开窍,Day的有参构造方法如下,三个参数按顺序分别是年、月、日:

 

 

主函数中创建的DateUtil类中对应的三个参数如下:

 

 

 

 

对应DateUtil的有参构造方法,我一开始不动脑子地按照类图上给的属性的顺序从上到下写的,就写成了DateUtil(int d, int m, int y),其中d对应的是year,y对应的是day;但是下一行又想着y代表的应该是year,而day代表的是day,所以就写了this.day = new Day(y, m, d),就等于把代表“日”的“y”放在了“年”的位置,把代表年的“d”放在了“日”的位置,所以一直会输出“Wrong Format!”。

 

 

 

2.不能像之前一样直接调用各个类的方法,而需要多次调用,如下:

 

 

 

 

3.之前是利用“this.isLeapYear(year)”判断每一年是不是闰年,而在这里需要通过“new Year(y).isLeapYear()”将y值作为参数传回去进行闰年的判断;另外需要注意,在判断“下一年”和“前一年”是否是闰年时,传回去的参数分别应该是“y+1”和“y-1”,否则会造成几天的偏差。

 

 

 

 

4.求两个日期相差的天数的时候判断闰年的方法也有所不同:

 

 

5.返回值也需要改动。

 

 

 6.原来的主函数中输出如下:

 

 

但在本程序中会输出一串类似地址值的符号,所以主函数中也要改一些东西:

 

 

OOP训练集06 7-4

在设计程序之外,还有几点问题:

1.单例模式没学全,卡在多次存款和取款着两个点上了,一开始写的如下,当时脑袋抽抽地觉得有没有static问题不大,也根本没有调用getInformation,光顾着new ClientInformation()了,当然无法保存之前的存取记录,也无法正常使用查询功能:

正确的单例模式应该如下:

 2.用户信息类一开始弄错了,每张卡给安排了一个变量名,每个账户数组中放的是卡的变量名,银行用户数组也给安排了四个,每个数组里面放的是账户的数组名,而银行数组里面放的是用户名的数组名,但这样与前面设计的各类的属性不一致,修改后如下;同时,这就导致了用户信息类中变量名和数组名的意思和含义不对,没有做到见名知义,比如Card[]更应该改成Account[],因为其中放的是每个账户内的卡号,而一个账户可以由几个不同的卡号,若按照名字理解,就要每张卡对应一个Card[];每位客户的账户同理,更应该由Account[]换成User[],而相应地,每个银行的用户应该由User[]换成Bank[]:

 

3.如上图的各个类的属性设计,应该对应客户信息类将一些属性设计为数组。

 

OOP训练集06 7-5

1.本题加了许多东西,不过仍然有两个测试点没有过,测试点4和测试点8,其中测试点4需要考虑到超出透支额度的取款时,需要先加上手续费,然后再判断是否透支取款超过5万元。

2.测试点8中在本行和跨行取款是不一样的,需要注意一下。

 

 

四、改进建议

1.由第二部分对OOP训练集5 7-5中第一点的分析应该改为:

public DateUtil(int y, int m, int d) {
this.day = new Day(y, m, d);
}

2.在OOP训练集05 7-5中为了省事把计算跨行手续费放在了Check类而不是取款类,这部分应该再改改:

 

五、总结

这三个题目集比之前三个题目集难度更大,代码也更长,涉及了Java的三大特性,更加考验我们的能力。通过这三次题目集,我得到了不小的长进:

1.掌握了Java的三大特性——封装性、继承和多态;

2.学习了正则表达式的多种用法;

但也存在许多问题:

1.对类的设计比较混乱,这个程序需要设计那些类、每个类里有包含了哪些属性和方法,一开始并没有设计好,到写程序的时候因为功能需要又回去删删改改,导致有些类的属性混乱,有些类其实用不上,有些类又承载了本不属于它的东西,删删改改、缝缝补补一套下来,费时费力且没有得到预期的效果;

2.还不能正则表达式的使用,特别是再水文检测哪一题,需要一点点对着资料写,各种符号数字字母让我很混乱,无法处理。

标签:总结,题目,训练,int,类图,PTA,如下,OOP,Java
From: https://www.cnblogs.com/zx3374/p/17364109.html

相关文章

  • OOP题目集4-6总结
    前言:题目集4-6的题目量不大,但难度比较大,第4次题目集考察的知识点主要是字符串的使用以及数组;第5次题目集考察的知识点主要是正则表达式、类、字符串语法和数组语法的使用和聚合的使用;第6次题目集只有一道题目,但这道题目是由菜单计价程序叠加四次的题目,主要考察类和逻辑,测试点十分......
  • 哈希表总结
    哈希表总结常用数据结构总结数组有些时候,使用数组可以直接充当简单的哈希表,数组元素的下标作为key值,元素的值作为value值比如统计一个单词各个字符出现的次数,因为字母26个数目是有限的,所以数组的下标也是有限的,可以轻松实现。使用数组的情况,数组的下标一般都是有......
  • OOP题目集4~6总结
    前言:这次的题目集难度较以往而言提升了很多,突然提升的难度难免会造成些许的不适应。但是题目虽然有难度,同样的收获也与难度成正比增长。而这次题目集总结主要以三道大题来进行分析。  第四次作业:题目7-1菜单计价程序-3:需求分析:设计菜单点单计价程序,根据输入......
  • 南昌航空大学4-6次PTA总结
    对近期所学进行一个小结,主要针对pta上所发布的近三次作业,从多方面来分析这三次作业之间的联系和差异性,并从中了解自己的不足和缺点。最近的三次作业, 第一次作业除了第一题菜单类比较难其他还是比较简单,通过调用java自带的方法来节省我们编程的时间,主要考察的是我们对java的字符......
  • 最短路+二分题目整理
    前往奥格瑞玛的道路题目链接\(\qquad\)题目要求最小化最大费用,显然是使用二分答案,二分答案首先应该看限制和目标,此处的限制是血量限制,而目标是费用目标。这种情况我们可以二分费用,然后在图上跑最短路判定血量是否满足。\(\qquad\)对于check函数,我们去判定是否存在一条道路使得......
  • 刷题总结
    结束本轮的刷题任务感受颇多基本体现在双指针回溯以及动规上使用双指针法,定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。,时间复杂度是O(n)回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合排列问......
  • 总结,从 766 开始(Div2 30)
    3.10A分块B 分数规划,以前没学过C推式子 3.11A推结论,先划分连续段,然后从一个长度>=k的连续段开始操作B推式子C平衡树套线段树(为了节省空间需要把内层线段树改成平衡树)或定期重构+树上差分+动态开点线段树,每个结点上有一棵线段树,每B次操作后向上合并 3.12......
  • 师大 2023.04 总结
    题目1:P10011A第1次提交提交通过。每次减去\(\max(n-n/2,x)\),边减边计数。题目2:P10021A第1次提交提交通过。\(cnt\)表示字符串有\(cnt\)对对应的字符不同。对于每组询问,因为只改变一个字符,看改变字符改变前和改变后和对应字符的关系(相同或不同),以改......
  • 每日总结2023-04-29
    今天初步学习了kotlin语言在学习中认为比较重要的点:在学习字符串模板时,我们了解到,可以在单个变量名称前加上$符号。但是,如果您使用更复杂的表达式,就必须用大括号将该表达式括起来,并在大括号前添加$符号:${unreadCount+readCount}。用大括号括起来的表达式(即unreadCount+......
  • OOP4-6题目集总结
    4-6次题目集,从集合框架,正则表达式,类的继承与多态三个方面展开,在帮助我们了解java常用的工具(集合框架,正则表达式)的同时让我们学着利用类与类之间的关系来减少耦合,第六次题目集侧重于类的继承与多态,同时让我们自己根据题目设计类来解题,在了解面向对象的编程思想后,加强我们对类与......