第一次大作业总结

  一、总结前言

 

           经过了第一阶段的java学习,笔者在此对前三次的PTA题目集进行分析以及总结。

          第一次作业:

          第一次作业的题量较多,但难度较低,知识点侧重于对输出格式的考察以及对浮点数输出的判断,对输出数据的精度的考察是本次作业重点之一,除此之外,该次作业对输入输出的考察也比较多,更偏向对学生基础能力、基本功的测试。

          第二次作业:

          第二次作业的题量较少,难度集中在第二小题,另外两小题的难度一般,知识点侧重对字符串学习的考察,也有对String的格式判断与内容提取的测试。此次作业难点在于对输入字符串的解析以及判定。

          第三次作业:

           第三次作业题量与第二次相同 都是三道题目,但此次作业的难度相当大,知识点侧重于对类的灵活使用,三道题目层层递进,难度也是逐渐增大,题目主体是坐标,需要逐渐构建出框架,自下而上的完成。

 

二、设计与分析

 

        第二次作业7-2:RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

        类图:

  

 

      因为当时笔者对类的掌握程度还不太够,所以一股脑将所有全写进了main中,这一点是不可取的,这会使得代码的阅读难度直线上升,也不方便进行代码的修改。在后续的学习过程中要学会使用类,增强代码的可读性。

      第三次作业7-1:

输入连个点的坐标,计算两点之间的距离

输入格式:

4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。

输出格式:

计算所得的两点之间的距离。例如:1.4142135623730951

      类图:

      

 

           第三次作业的难点在于对坐标的分析,怎么从输入的字符串中获取信息,再通过这些获取到的信息通过各种算法完成要求。万事开头难,做好第一步才可以接下去完成后面的要求。笔者在这道题目中未能构建好坐标的解析,面向过程而非面向对象,所以虽然这第一道题拿到了点分数,也让后续的工作无法完成。

      第三次作业7-2:

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。

       类图:

        

 

              只能说这次作业难度真的很大,超出了笔者的能力范围,因为第一题没有写出坐标的类,压力给到了第二题,笔者在构建坐标类的遭遇了滑铁卢,能力有限,心有余而力不足,只能简单延续第一到题目的思路面向过程,对每一项要求单独做出解析,代码冗长难以修改。希望此次血一般的教训可以起到警醒作用。

        第三次作业7-3 :

用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"

         

 

        笔者第三题全部代码就在这了,最后48分总分得到了4分,只能说是惨不忍睹。一方面确实题目难度较大,另一方面笔者自身能力确实不够,各个方面都有待提高,下次不能再这样拿分了,向摸鱼摆烂说哒咩。

 

三、踩坑心得  

 

      说到踩坑那可真是深有体会了,那些因为编译错误造成的小问题就不多赘述了,主要讲一讲其他问题吧。就比如第二次作业的7-2串口字符解析,这道题目算得上是学习Java碰上的第一个较难的题目了,当时看到这道题第一眼就觉得不简单,于是写完了其他两题后才慢慢细看题目。题目的要求还是有很多的,有结束符,奇偶校验等。那个奇偶校验真的是感觉有点奇怪,反正我是没有过这个测试点的,然后那个输出排序的我也是没有做到面向过程,只是机械的将最大值定到3个就过了,这点还是很不好的。

如图所示:

          

 

 

 

      而第三次作业真可以称得上是梦魇一样的存在了,鄙人才疏学浅,不胜笔力,虽然写之前听了老师的讲解,但依旧难以下手,无法构建出坐标的类,后续依托坐标才能做的就更是做不了。第三次作业的三道题有一个递进的规律,先将前一道题做出来,在前一道题的基础上做下一道题,题目的连贯性很强,只要走出第一步后续就会很明朗。

 

 

         可惜笔者未能很好的完成预计的步骤,只能面向过程走一步是一步的拿一点分,这点相当不可取,希望大家引以为戒。

四、改进建议

 

          讲道理以笔者的水平是没什么资格对相应题目的编码改进给出自己的见解,但既然列出来了就多少得写点东西。例如第二次作业的7-2,编写程序,模拟串口接收处理程序,笔者的代码就没有很好的判定字符串的长度,以至于对结束位置以及奇偶校验的判定出了些问题,一些测试点过不了。第三次作业的7-1,笔者本来打算建一个获取坐标的类的,但是因为做不到从输入的字符串中将其中数字提取出来而作罢,这一点是需要进行改进的。而第三次作业7-2笔者延续了7-1的老路,因为坐标问题无法正确解题,这一点是需要大刀阔斧进行改整的。至于第三次作业的7-3,笔者更是无从下手,更不用说提出什么有价值的改进意见了。笔者希望出题老师可以考虑一下给题目写出一个类来,方便大家进行题目的完成。

 

五、总结

         总的来说,这三次Java大作业的完成情况并不是很好,尤其是第三次作业,笔者在一开始没给予足够的重视,导致最后时间不够,心态也不足以支撑笔者完成。这三次题目的考察范围还是很广的,有输入输出的考察,有对字符串理解的考察,还有对类的掌握程度的考察。笔者从这三次作业中学会了不少,比如正确的输入输出格式,如何从字符串中获取信息,以及对类的使用的一些思索。

         此次大作业,笔者很明显发现了自身基础能力不足这件事,就拿第三次作业举例,笔者无法做出坐标的类来,第一步都走不出去后面更是走不出来。当然,笔者需要加强自身的编码能力,对一些函数的应用能力有待加强,在后续的学习中,要加强类的灵活性,通过对设计方式、设计思维的学习,进而进一步体会Java带来的特性和其灵活的地方,从而更熟练的掌握面向对象的程序设计。此外,笔者对正则表达式的理解能力还不够,亟需加强。

        当然了,笔者也希望老师可以在课程讲解中加入一些对例题的解读,希望每次作业结束后老师可以将自己对题目的理解整合出来分享给大家,让笔者可以学习到正确的代码应该是什么样子的,这样笔者对题目的理解会更上一层楼。

 

posted @ 2022-04-10 00:42  小诚c  阅读(129)  评论(0)    收藏  举报