面向对象程序设计-前三个月小结
前言
不知不觉已经开始学习面向对象程序设计三个月了,先发一个小吐槽:老师总是在清明,劳动节,PTA或者oop上面的实验以及作业,这让我感到有点小头疼。
虽然说作业多,但是恰逢佳节,稍微降低了点作业难度,方便我们学生及时做完,这么一想
老师还是挺好的,不是吗?
学了这么久面向对象程序设计,也做了有那么几道题目,感受到:面向对象和面向过程确实有很大的区别。就拿最近的一次PTA平台上的作业来说:识蛟龙号载人深潜,立科技报国志
说真的,这个题目不是很励志吗!!!
在练习代码的编辑能力的同时,心系国家大事,认识到祖国的强大,岂不是两全其美,希望之后多出一些这种题出来!
不过话说回来,难是真的挺难的
我需要分析每行都有上面成分2,然后再逐一通过算法将需要提取出来的信息提取完成
就好像是面向过程程序设计是把难的问题逐步分解,拆成小问题,然后解决。
面向对象程序设计就像是把难的问题分析的很透彻,每一个类都思考清晰,然后在进行程序的编码。
分析问题感觉是所有学生的要害,总感觉我有哪里没想到,然后程序写得稀巴烂。
话不多说,上题!
PTA大作业四
作业四 4-1 作业分析
读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和
说真的,这道题就这一句话,但是,却让我想破了头,我该怎么编辑我的代码,把那些我想提取出来的元素、字符提取出来并相加,主体内容都清楚,随便打点东西上去就行,但是难就难在怎么弄才能把一串字符中的数字提取
出来,按照不同的提取方式提取出来,真的是挠破了头皮。
代码分析
看似短短三十行,但是真的想的挺久的说实话,题目中有着不同位数的数字,比如9月9日,18时xx分等等数字信息,刚开始想,我该怎么把多位数的数字提取出来,如果单纯用字符提取的话,最多也就只能做到将数字一个个提取
出来,这样获得到的答案绝对是与标答不相同的,所以,我想了一些其它的办法,如上图所示
通过扫描输入样例中字符串中的字符类型节点,从而从字符中提取出需要的信息,并通过(Integer.parseInt)将字符中的字符类型进行转换,从而计算相对值
说实话,这个新知识是之前从来没有接触过的,觉得很新颖,而且说实话很实用,比如c语言和其他一些代码编程软件中都没有
度量分析
本题复杂程度为6
啊这,没之前的一些简单题目高吗,不应该呀,个人觉得这种题目会比之前的某些题目难很多
结果演示
有一部分没有截出来,但是看到这么多其实也能说明算是做出来了吧
下一道题!
作业四 4-2 题目分析
说实话(我也不知道这句话讲了多少遍了),这道题真的是人能做出来的吗,突破了我对题目的认知,一道题有70分,多少个测试点,给孩子人看麻了说实话,稍微分析一下
题目还是跟之前一样,是算多边形的题目,但是测试点也太多了吧
光任务点就有5个,我的老天
1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果输出true/false,结果之间以一个英文空格符分隔。
2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果输出true/false,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出not a quadrilateral
3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出not a quadrilateral
4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个四边形或三角形,输出直线与四边形(也可能是三角形)相交的交点数量。如果交点有两个,再按面积从小到大输出四边形(或三角形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角形的一条边线重合,输出The line is coincide with one of the lines。若后四个点不符合四边形或三角形的输入,输出not a quadrilateral or triangle。
后四个点构成三角形的情况:假设三角形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:
1)符合要求的输入:顶点重复或者z与xy都相邻,如x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。
2) 不符合要求的输入:z 不与xy都相邻,如z x y s、x z s y、x s z y
5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项4)的内部(若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。如果点在多边形的某条边上,输出on the triangle或者on the quadrilateral。若后四个点不符合四边形或三角形,输出not a quadrilateral or triangle。
代码分析
真的不知道何从下手,最怕这种题目了,只能通过混分的方式得到些许分
度量分析
本题复杂度为7
不理解为什么还能这么多,可能是测试点多,然后加了switch函数,比较复杂把(胡乱分析)
结果展示
也算是有部分结果呈现出来了吧
作业四 4-3 作业分析
讲真的,这道题我竟然做出来了,很开心!
编写一个银行业务类BankBusiness
让我们做一个银行业务的代码
1)公有、静态的属性:银行名称bankName,初始值为“中国银行”。
(2)私有属性:账户名name、密码password、账户余额balance。
(3)银行对用户到来的欢迎(welcome)动作(静态、公有方法),显示“中国银行欢迎您的到来!”,其中“中国银行”自动使用bankName的值。
(4)银行对用户离开的提醒(welcomeNext)动作(静态、公有方法),显示“请收好您的证件和物品,欢迎您下次光临!”
(5)带参数的构造方法,完成开户操作。需要账户名name、密码password信息,同时让账户余额为0。
(6)用户的存款(deposit)操作(公有方法,需要密码和交易额信息),密码不对时无法存款且提示“您的密码错误!”;密码正确、完成用户存款操作后,要提示用户的账户余额,例如“您的余额有1000.0元。”。
(7)用户的取款(withdraw)操作(公有方法,需要密码和交易额信息)。密码不对时无法取款且提示“您的密码错误!”;密码正确但余额不足时提示“您的余额不足!”;密码正确且余额充足时扣除交易额并提示用户的账户余额,例如“请取走钞票,您的余额还有500.0元。”。
这不是??
这不是手把手教我们做题目吗
这不得手拿把掐!
代码分析
说真的,这道题做起来还是很不错的,能告诉我们在做题目的时候,我们该如何创建类,如何通过代码的形式完成一步又一步的过程
度量分析
本题复杂程度为17
感觉还行,毕竟是自己一手一手打出来的
题目结果演示
perfect!!!
以上是本次pta作业四的四道题,看上去完成了两道题感觉会比上个月的总结时有些许进步,但是看细节的话,还没越过自己最大的困难,就是多边形的题目的编辑
还是容易卡壳
实验3-1: 农夫过河的继承与多态
农夫过河这个月已经不知道接触多少遍了,把农夫从河这边带过去,带只羊,狼,菜(听说后面还有兔子和胡萝卜)
前一段时间还加了一个载体船,农夫需要用船来运送这些物品,不再只是农夫的走来走去,从内容上难度就得到了很大的提升
到了这次实验,可想而知,改的不只是一部分,更多的是把代码的主要形式改出来
话不多说,步入主题
题目分析
将之前实验中的农夫过河的代码改成继承与多态形式
这道题牵扯到了最近学的继承与多态,感觉还是挺难的
代码部分分析
看起来很多,总共290行左右,这道题需要我们创建很多类,然后依次连接在一起得到我们需要的答案
度量分析
本题复杂程度为17
部分结果演示:
达到了实验的最初目标!!!
学习总结:
说实话,自己写出了不少的错误,主要的原因是没有进行足够严格的测试,PTA上的测试点我又不知道它测了什么,所有的测试点都是通过自己一下一下慢慢摸索出来的。通过近长达三个月个月的java课程学习,我对java
的初始运用有了更多的了解,相对于c语言来说,java给了我们更多的选择空间进行代码的编写,并且也让我们更加体会到了未来当程序员的时候,面对客户的需求,面对客户所提出的一些问题,我们该如何通过代码的方式进行解
决,并依次实现相应功能是有多么难,希望自己之后能花更多的时间在java的学习上,老师上课讲的东西很少,但是很精;java的大多数东西都是靠自学学的,我认为这也是培养能力的一种方式,这才叫主动学习,不过值得庆幸的
是,通过长达一个月的深度学习,我成功的做出了作业四的一三题和实验题,还是可喜可贺的,后面的学习道路上也会更加努力的。
走了些弯路,花了不少时间,希望以后可以更加面向对象。