OO第一次博客作业

 

前言

       虽然在学习C语言时,我已经使用过PTA平台,但在Java学习时,还是还有许多出现错误的地方,如:第一次写java作业时才发现相比于在其他地方写Java主类的名称是固定为Main的。而对于这三次发布在PTA上的大作业来看,三次作业的知识点都位于Java的前8章,也就是在接触类与对象之前。这些题目大多是围绕选择与循环作为考点,还有部分作业则是围绕字符串删改,截取等考点做文章,旨学生在C到Java之间进行过渡。在题量方面,所有的大作业量都是较少的或中等的,除第一次外都是仅有三道题。但是在难度方面,大作业也是在随着作业题量的减少而在逐级递增,尤其为PTA大作业三,一改之前题型,一题中覆盖多个知识点,同时也对同学的数学知识进行了考核,难度向上提了许多档次,以至于许多同学放弃了对大作业三拿满分,拿高分的念头。但也为我们将来的学习做了一个好的铺垫。

 

设计与分析

(1)      PTA大作业一

第一次的大作业是三次作业内,最为简单的作业,题量稍多然而题目偏简单些,第一题是这样的

 

 

看得出来只是非常简单选择结构加上简单的计算来判断一个人的胖瘦而已。

第二题如下

 

 

题目的整体结构非常简单,单纯的是在用Java去计算一道题目,简单的陈述结构,但是也有需要注意的地方,那就是输出,是的,在System.out.println语句中,数据输出是在前面添加了一个“(float)”,算是一个新的知识点,倘若不加的话会导致答案精度出现问题,如图

 

 

而答案却要求保留小数点后6位,以至于与答案不符。

此后3-4与前面题目无新增内容与考点,直到第五题

第五题如图

 

注:由于后续题目代码长,此后题目改为用eclipse来展示。

此题使用switch语句,相比起if-else语句要跟加简洁明了且结构清楚。此外与前几题无异,在此不做赘叙。

第六题如下

此题的新知识点在于将输入的字符串进行长度大小判断且将其进行正确的长度分割,使用了新的语句substring();

 

此后题目无太多新增知识点,不多赘述。

(2)      PTA大作业二

此次的大作业相比于第一次的大作业,题量仅有三道,但其中第二题的难度相比于之前都有较大提升,后会特别讲解。

第一题如图

 

此题要求为将正确的且不用区分大小写的英文字母转化为相应的数字。

那首先就是将接收到的字符串拆分为一个个字符,然后使用ASCII码值去判断字符是否为英文字母如下部分代码

 

如果为英文字符则进行下一步判断

 

第一题结束

第二题整体代码如下

 

此题目难点在于将无关的部分去除留下真正有用的部分,而真正需要留下的部分需要进行多次的选择,首先需要将“0”找到,也就是有用信息的开头,这里使用indexOf ()语句和charAt ()语句,indexOf()语句用处在于去寻找是否存在有用信息,倘若全是“1”消息,就不必进行后续的所有判断直接输入null data,如图

 

 

之后使用charAt ()语句则是寻找该“0”的正确位置,并做后续的判断也就是有效数据奇偶校验位是否为奇,结束部分是否为“1”等,并对不同情况进行不同输出。在此需注意所谓奇偶校验位的意义,若不理解也会造成不必要的时间浪费。同时也要稍加留意留取有效数据的长度等信息。总体而言,题目的整体思路并不会有太大难度,但是在第一次见识这种题目时,多条要求与较为官方的的语气会让人不由得感到压力,且面对从来没有见过的词语,基础上网查阅能力也有要求,外加部分细节的处理,让这道题产生了难度。

(3)      PTA大作业三

相比于前两次作业,这一次作业的关键在于前后作业的衔接,从第一题的点到第二题的线与最后的面,其中难度上涨,但每道题都有前面题目的影子在,如何正确的解决问题且对后续代码的提供帮助是最为重要的,也时本次作业的精华所在。

第一题代码如下:

 

第一题的难点不在于如何计算两点间距离,而在于正确的输入格式,在此我使用了try语句和Double.parseDouble()语句,它可以帮我将绝大部分的不正确输入如含有英文字母,++1,--1,等排除掉,之后发现还需要排除“00”,“01”,“.0”等状况,采用简单的if语句来处理。如下图

 

 

之后就是正常的判定输入格式的正确性,如排除多个“ ”与多个“,”的情况。然后即可结束本题。

第二题完整代码如下

 

该题目不仅继承上一题输入格式的要求,也在部分区域使用了第一题距离计算的部分。此外,相比与之前所有的题目,这道题更推荐多使用方法,这会让整体看起来更加清楚且更加明了,不同的方法对应不同的要求和题目,在自己输入代码与修改时也会更加方便。

现在讲解一下我解此题方法,首先是使用正确的输入方法,在第一题中就已经有说明,在此不多做赘述,之后便是根据输入的序号来处理不同的问题。

第一是计算斜率,但是要注意斜率不存在的情况要输出“slope does not exist”,

在后面的许多题目也有需要考虑斜率的情况如判断两直线是否平行等。但应为斜率不存在导致,单一种情况需要分类讨论会使代码累赘,所以建议可以的话少使用斜率去计算。

第二是输出第一个点与另外两点连线的垂直距离,采用高中数学中计算点到直线的距离公式如图

 

不用直接使用斜率,使得代码更加短小精悍。

第三是判断三点是否在同一直线上,虽然使用斜率需要分类讨论,但这里使用任意两点斜率是否相同明显会跟加方便所以采用此方法。

第四是判断前两个点所构成的直线与后两点构成的直线是否平行,方法与第三大同小异。

第五是计算交点坐标,该计算会在第三题中有所帮助,这里是采用方程一般式来求交点,之后采用正负异号的方法来判断是否在线段内,如图

 

第二题结束。

第三题我本人并没有完全做出来,一是觉得许多计算太过麻烦,想寻找快捷方法导致浪费了大量时间,其次是在第四点陷入太久僵局,思路混乱使得漏洞百出,无奈删除掉大量代码。也是在思考第四点是才发现前面两题对第三题的作用,在敲之前的代码是应当考虑对后面题目所能提供的帮助。

第三题代码如下

 

 

第三题是对三角形进行一系列的提问,从这也能看出编程与数学之间的关系,和逻辑在两门学科之间的重要性。

题第一点:判断三角形的的类型,只需判断边长,较为简单。

第二是计算周长,面积与重心坐标,相比于第一点难度上升但都可以套高中数学公式得出答案。

第三是判断三角形角度,相比起使用角度去直接计算,个人偏向于使用a平方是否等于b平方+c平方,这种方法可以套用上面计算周长时得出的结果,会减少代码不必要的东西。

第四则是三角形判断被直线切分,但我不会。

第五是使用射线法来判断,如果第四点写出来的话,第五点会方便很多。

 

采坑心得

       这次的三个作业的重点在于输出格式与输入格式的问题,很多时候,题目其实逻辑与计算方法非常简单,但是在输入输出的判断上花费了大量的功夫,很多时候90多行的代码,有一半是在修改输入与输出是否合法,所以在写题时需要多注意题目的要求与后面给出的输出格式,这样就不会耗费多余的时间。

改进建议

       我本人更加希望题目的测试点可以多,但更希望能够能提示测试点能都有所提醒,这样也能够更方便我们去查漏。且题目也可以加入后面的知识点,做到融会贯通。

总结

       对于本阶段三次题目集,我个人学到了许多

(1)      输入输出的格式是需要有所讲究。

(2)      在学习编程时也需要有良好的数学基础。

其次我在以后的学习中也应当多学科融会贯通,且在细节处多加把控。

最后我在写代码时也要更加注重结构与方法的使用。

我对java的了解还很浅显,需要学习更多的结构、语法知识来充实java的学习。

以上就是我这次bolg总结。

posted @ 2022-04-11 09:55  彭嗣争  阅读(59)  评论(0)    收藏  举报