一、前言

通过对PTA的第七、八、九题目集的学习与总结,我感觉本三次题目集的题量不大,在完成范围之内。难度的话也一般,有难度,但是在解决范围之内,大多数较难的知识点可以通过自学(图书馆看书、看网课)的方式学习。然后本三次题目集涉及到的知识点有类的继承、多态的运用、ArrayList泛型的应用方法、Comparable接口的应用、单一职责原则的应用、“开-闭”原则的应用、正则表达式对字符的匹配与切割存放、换行输入等。可见本三次题目集的知识点非常多,也较为紧密,需要多以应用才能掌握。

二、设计与分析

   本三次题目集共有五道题目,分别为图形卡片排序游戏、图形卡片分组游戏、ATM机类结构设计(一)、ATM机类结构设计(二)。

我们先来具体分析题目集7的第一题,本题要求输入圆形,矩形,三角形,梯形的数量及其边的长度,从而通过运算并且通过一定格式来输出每个图形对应的面积。同时题目还给了图形的边长限制,即不符合题意或者不符合数学逻辑的话会输出“Wrong Format”。我对于本题的具体思路是首先每个图形分别为一个类,有自己的属性。然后每个类里都有计算自己面积的方法,最后在对每个图形的面积总和排序,然后计算总面积。图形类的代码较简单,就不拿出来看了。下面为对图形卡片进行处理类DealCardList的构造方法:

该构造方法的作用是将输入的数字与图形类型相匹配并同时允许用户输入相应图形类型的边长,同时将该图形类型加入到ArrayList链表中。

此方法为对所有的图形面积进行排序并输出,可以在后面show()方法中直接使用。

下面为show()方法的输出格式:

此外,图形类型卡片处理类中还有对图形类型边长的检验方法和对图形类型的面积取总和的方法。这些方法都较为简单。

本题的重点在于如何对输入的数字来匹配相应的图形类型从而将该图形加入的ArrayList链表中,我通过switch/case解决了数字匹配图形类型的问题,之后在每个case里创建了一个图面对象来对每个相应图片进行边长出入,在加入到ArrayList链表中。下面为本题一个运行实例:

然后下图为本题的报表内容:

下面为对第七次题目集的第二题的分析。由于第七次题目集第二题与第一题非常相似,只需修改一些代码即可。因为本题为图形卡片的分组,所以我创建了多个ArrayList链表,将不同的图形类型对象存放在不同的ArrayList链表中,这样便成功的进行了分组的第一步。

同理,每个这样的存放操作还是在case里进行的,修改后的代码如下

然后后面的处理方法完全与题目集七的第一题一样(对图形类型的边长检验、对图型类型的面积总和排序、求图形类型的面积总和)。

唯一的差别就是多了个求图形类型中面积总和的最大值在输出。

下面为本题运行实例:

下面为第八次题目集的第一题分析。本题要求编写一个银行ATM机的模拟程序,能够完成用户的存款,取款以及查询余额的功能。

本题涉及的类有Bank类、User类、Account类、Card类以及ATM类。

具体信息如下:

每个用户对应一张或多张卡号,且每张卡号的密码都是88888888,如果查询银行时输入的卡号不存在,则输出“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”。

明确题意后,首先本题需要换行输入信息,直到输入“#”时停止。代码如下:

输入完成后,在使用split函数对输入字符串进行切割存放,然后在一一比对。首先我们先判断卡号,根据卡号来锁定银行用户,其次我们判断密码是否正确,如果正确,我们在进行下一步判断,否则直接跳出运行的程序。接下来我们在判断银行用户是否在相应的ATM机上进行相关操作,如果不在卡号所对应的ATM机上进行相关操作,则也输出报错语句然后跳出程序。最后,在判断银行用户到底时该存款还是该取款,如果输入金额为大于0则表示银行用户将进行取款,否则如果输入金额小于0则表示银行用户将进行存款。下面将给一个银行用户的判断例子:

本题难点在于将输入的字符串切割后存入数组中,然后用数组中的元素表示每个需要比较的数据,这就需要灵活巧妙的运用for循环语句和if/else语句来进行相关判断。

除此之外,本题要有一个查询的功能,即如果只输入一个银行用户的卡号而不如果其余部分(卡号密码、ATM机号、存取款数额)的话,本题会实现一个对银行用户的余额查询功能。对于实现这一功能,我通过判断split切割后的字符串数组长度来完成,即如果字符串数组里只有卡号这一个元素的话,这一字符串数组的长度就为1。如果字符串长度为1的话,就让他查询该银行用户的余额。下面为本题的一个运行实例:

接下来为本题的生成报表内容:

下面

下面来分析一下题目集9的第一题。这一题为题目集8的改进版,即完善了很多题目集8里无法实现的功能。在题目集8中银行用户只有借记卡,而在本题中添加了贷记卡。此外,本题中银行用户可以在任意银行取款,但如果跨行取款的话,需要支付一些取款金额的手续费。本题银行相关数据与用户相关数据如下:

以上信息可知,不同银行对于跨行取款的手续费要求不同。下面为本题的输出规则:

由上可知,如果借记卡银行用户的余额小于0的话,会输出报错语句,

而如果贷记卡银行用户的余额小于0,则会继续输出该银行用户的余额,但是如果贷记卡银行用户的余额小于-50000.00的话,也会输出报错语句。如下为判断其中一个银行用户的代码实例:

下面为本题的一个运行实例:

三、采坑心得

   通过写这三次题目集,我细心了很多,因为其中的细节真的太多了。我每次几乎都在输出格式上采坑,要么多一个空格,要么少一个空格,要么字母大小写看错,导致我检查前面代码那么久,后面采发现时输出语句的问题。还有就是一些不规则符号也会输出错。此外,还有时候就是题目要求没看清楚就开始做,导致后面做不出来,回头看题目才发现题目理解错了。还有就是小数点,有时题目要求保留2位小数,而我却没看到。在题目集8和题目集9中,我因为对if/else的知识点有些遗忘,导致打出来的代码总是无法实现题目功能,而反复检查也检查不出问题,浪费了大量的时间,后来查了查资料才发现

我基本知识点都理解错了。下面就是因为我对if/else的理解错误,导致输出结果总是不符题意:

以上结果对银行用户余额的计算出现问题,就是因为if/else语句没有使用好才导致的。

四、改进建议

  对于本三次题目集的代码而言,我的代码虽然没报错,却有很多的警告,我有时创建了很多变量却没用到,并且代码的格式也不是很好看,在以后的作业中,我会做到可持续改进,尽量让自己的代码更简单,更好看。

五、总结

  通过对本三次题目集的错误总结,我学到了类的继承与多态、ArrayList链表,能够更好的掌握这些知识点,同时也对一些原则有了一些了解。在以后打代码的过程中,我会完成一个功能就运行一次,看看有没有问题,而不是打完全部代码在运行,我发现这样如果报错的话,会很难找到错源,这样就会浪费大量时间找错。

对教师的建议:虽然代码很枯燥,但是还是想多听老师讲讲代码,希望老师可以稍微讲一下文字方面的知识,而多用代码来实践学到的知识,告诉我们每行代码的作用以及代码的很多语法,我们其实知道算法,只是不知道怎么用代码来表示,也就是不懂语法。

对课程的建议:我希望课程能够把知识点讲的详细一点,因为有些只是太抽象了,很难一时半会理解,所以希望老师讲的详细一点。

对作业的建议:希望作业量能够适度一些,在我们的完成范围之内,题目难度也适中一些。

题目集7-9总结性Blog的更多相关文章

  1. Java高级程序员(5年左右)面试的题目集

    Java高级程序员(5年左右)面试的题目集 https://blog.csdn.net/fangqun663775/article/details/73614850?utm_source=blogxg ...

  2. KMP,Trie,AC自动机题目集

    字符串算法并不多,KMP,trie,AC自动机就是其中几个最经典的.字符串的题目灵活多变也有许多套路,需要多做题才能体会.这里收集了许多前辈的题目做个集合,方便自己回忆. KMP题目:https:// ...

  3. PTA7~9题目集总结与归纳

    前言: 总结三次题目集的知识点.题量.难度等情况. 目录: 题目集7(7-1).(7-2)两道题目的递进式设计分析总结 题目集8和题目集9两道ATM机仿真题目的设计思路分析总结 一. 题目集7(7-1 ...

  4. PTA4-6题目集总结与归纳

    前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...

  5. 浙大版《C语言程序设计(第3版)》题目集 --总结

    浙大版<C语言程序设计(第3版)>题目集 此篇博客意义为总结pta上浙大版<C语言程序设计(第3版)>题目集所做题目的错误点,心得体会. 1.练习2-10 计算分段函数[1] ...

  6. PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分)   给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...

  7. PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分)   给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...

  8. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...

  9. PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)

    PTA数据结构与算法题目集(中文)  7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分)   每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...

  10. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

随机推荐

  1. .NET 6学习笔记(7)——ASP.NET Core通过配置文件启用HTTPS

    本质上我还是一个Windows App Developer,所以虽然会做一些ASP.NET Core的工作,但通常这些ASP.NET Core的程序会托管在Windows Service上,并且大部分 ...

  2. VS 管理控制台提示ScriptHalted

    一.结论 出现该问题是因为PowerShell 版本低的原因,按以下步骤操作即可 二.解决方案 1.下载最新PowerShell 安装程序包,根据系统找对应版本x86还是x64 https://www ...

  3. vue3 setup语法糖下,vue自定义指令的实现,以及指令全局挂载,自定义v-loading的实现

    最近一段时间,在做h5的移动端项目,UI组件库使用的vant,vant组件中的loading实在难用,无法包裹某个块进行loading,也无法对非组件的标签进行loading,所以想着自定义写个指令, ...

  4. SP2416 DSUBSEQ - Distinct Subsequences

    题意 求本质不同的子串个数(包括空串) 思路 序列自动机裸题 直接上代码 \(Code\) #include<cstdio> #include<cstring> using n ...

  5. Linux 下的十一款一流备份实用工具

    转载:linux.中国 https://linux.cn/article-7183-1.html

  6. SnakeYaml的不出网反序列化利用分析

    SnakeYaml的常见出网利用方式: !!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ...

  7. Oracle 备份与恢复 (Docker部署版)

    Oracle 备份与恢复 (Docker部署版) 一,宿主机设置定时备份脚本 1.检查Oracle容器是否正常运行 docker ps 2.进入容器,创建shell脚本 #oracle11g 是容器名 ...

  8. 基于C++的OpenGL 11 之投光物

    1. 引言 本文基于C++语言,描述OpenGL的投光物 前置知识可参考: 基于C++的OpenGL 10 之光照贴图 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多 ...

  9. redis(12)持久化操作-RDB

    前言 Redis 提供了 2 个不同形式的持久化方式: RDB(Redis DataBase) AOF(Append Of File) RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是 ...

  10. 五子棋 framebuffer版

    要在家目录下 makefile 1 main : main.o fun.o input.o fb_draw.o 2 gcc -Wall -o $@ $^ 3 clean : 4 rm -rf *.o ...