经过了前几周的学习之后,对于Java有了更进一步的理解,这几周的学习明显要比之前几周难一些,前五周基本上是一些基础知识的学习,没有涉及到特别难的东西,而这几周所学习的知识点难度有所提升,并且所作的题目也比之前的难很多,这让我有些力不从心。继承、多态、抽象、接口,再到后来的链表学习,难度在一点点加大,虽然题量几乎没有大变化,但是由于难度有变化,所以我需要花费的时间更多了。
PTA上面的题目主要有两种类型,一部分是一些基础类问题,主要目的是帮我们夯实基础,将基础语法、基础知识一遍遍重复,应用到那些题目中去,从而更加熟练的掌握这些基础知识,以便之后的使用;另一部分是一些实验类的题目,让我们对Java的特点有更深刻的了解,让我们的代码逐渐规范,同时能够锻炼我们的思维能力以及对于题目的理解能力。
这次作业的三道题是循序渐进的,由点到线再到面,一步一步由简到繁。
第一题
输入连个点的坐标,计算两点之间的距离
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
第一题比较简单,只是计算两点之间的坐标,相较来说还是比较容易做出来的。
第二题
用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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"。
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",
类图如下:
这一题涉及到了一些线之间的计算,明显要比第一题难一些,特别是在判断两条线是否平行的时候,由于我没有最初考虑斜率不存在的情况,所以一直在出错,经过好久的尝试才解决掉。还有一个问题就是两直线交点的判断,我最初一直没有完成交点是否在线段上的判断,也是经过好久的写写改改才完成。
第三题
用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
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"
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
如果输入的三个点无法构成三角形,输出"data error"。
注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0
选项4中所输入线的两个点坐标重合,输出"points coincide",
类图如下:
第三题是关于三角形的计算,也是这次作业中三道题中最难的一个,判断直线与三角形的交点数是这道题中我认为最难的部分,因为他有好多种情况,交点可以出现在线段上,也可以出现在三角形顶点处,所以我当时纠结了好久才把这道题写完。
这次作业就属于是第二种类实验性,两个卡片游戏,主要是为了让我们更好的掌握类的继承、多态性使用方法以及接口的应用,通过这种实验性的练习,让我对Java有了更进一步的了解,对继承、多态的使用方法也有了更深一步的学习。
两道题的类图如下:
第六次的作业一共五道题,前四道题属于第一种基础训练类的,主要是自学并练习正则表达式,总的来说,正则表达式并不是非常困难的知识,经过搜查资料和自学后,基本能把这几道题目做对。而最后一道题是属于第二种实验类的,ATM机类的设计,主要是练习Java类的设计,经过一次次尝试,也成功把这道题做了出来,但是我对类的理解还是不够深刻,需要继续学习。
最后一题的类图如下:
第七次作业是我自打学Java以来,唯一一次没有满分的PTA题目集,这次题目集有三道题,第一题和第三题相较来说是比较简单的,而第二题确如噩梦一般,折磨我了整整一周,但是最后我依然没有得到满分。
第二题:
用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
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"。
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
注意:输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0
选项1、2、3中,若四边形四个点中有重合点,输出"points coincide"。
选项4中,若前两个输入线的点重合,输出"points coincide"。
类图如下:
这一题是关于四边形的计算,由于他不是规则的四边形,既有可能是凸四边形,也有可能是凹四边形,因此他的面积计算就有些难度了,不能用常规的方法计算,我经过上网查阅资料,才找到求面积的方法。做题过程中让我最难受的还不是这些计算,而是长度超过限制!我先在eclipse上进行代码编写,运行成功后再粘贴到PTA的网站上,而就当我点击提交等待结果的时候,他冒出一行字“代码长度超过限制!”,我当时欲哭无泪,因为这样的问题一出现,我就只能重构代码,改变之前的算法,这让我痛苦至极,推翻自己之前的想法从新来过,真的很难受。又经过漫长的煎熬,终于算是提交成功了,但是分数还是很低,于是就开始了新一轮的斗争。题目中第四个选项是最困难的,首先他要分为四边形和三角形两种情况,然后每种情况下面又分为了好多种情况,比如四边形中,交点的位置是否位于四边形顶点,有几个交点位于顶点,位于哪个或哪几个顶点,分出来的两个形状是什么,面积怎么计算,等等一系列问题,搞得我焦头烂额,一边边的尝试和更改之后,七十分的题也仅仅拿到了六十分,没有拿到满分,这是让我非常痛苦的。
期中考试有三道题目,是循序渐进的,相较来说不算很困难,通过这几周的学习、练习,我对Java的理解也更加深刻,因此这三道题目做起来还算比较顺利,没有遇到一直过不去的测试点。
三道题的类图如下
通过链表的学习,渐渐体会到Java和之前学习的C语言的相似和不同之处。
搜索
复制