PTA题目集1~3总结报告
在本次pta的面向对象程序设计1~3题目集中,因为是开端,所以我们所需要涉及的java程序设计知识点较较为基础,但是往后题目难度也逐渐提高了,开始吃力起来。
题目集1~3作业
第一次作业
1.题目集01中的7-8 判断三角形类型
(1).内容:所涉及的知识点包括对数据的输入,输出,和判断。题目难度较低,主要还是取决与个人的数学素养,代码方面涉及并不是很多。主要是对各种三角形的判断,与非三角形的判断,和他们的输出结果,因为三角形类型很多,并且有许多都是包含关系,这里面就需要用到多个判断,如if语句,并且需要嵌套判断,不过总的来说题目集1相较于基础,比较简单。但是不知道是不是pta格式的问题,总有一个点测试过不去,在编译器上也没问题,有点奇怪,20分的题只能得18分。
(2). 设计与分析
:这道题目在设计方面只需要一个Main方法即可,没有涉及太多。
(3).采坑心得:
这道题目简单是简单,但是坑还是比较多的,如它判断的是三角形类型,而三角形类型包括太多了,等边、等腰、直角、其中等边就是特殊的等腰三角形,这就需要在判断上面下功夫,理清思路,更甚二者兼有,那就是等腰直角三角形等等。在判断方面需要仔细,仔细,再仔细。当然理清判断好这些条件,那么直接就可以完成了,但是我还是有个测试点迟迟过不去,没得满分。
(4).改进建议:(如图)如果涉及到更多,包括对三角形角度的判断进而来判断三角形类型,如钝角三角形,锐角三角形,这就需要运用到Math类中的三角函数方法,其中PI对应3.1514926..和E(自然对数的底),三角函数方法如下
• sin() 三角正弦
cos() 三角余弦
tan() 三角正切
asin() 正弦的反函数
cos() 余弦的反函数
tan() 正切的反函数
toRadians() 将角度转换为弧度
toDegrees() 将弧度转换为角度
• Radians(弧度) Degrees(角度)
• 如图:
从这些方法当中利用我们能够计算三角形的角度,进而来判断普通三角形的类型。
第二次作业
2.题目集02中的7-4 求下一天
(1).所涉及的知识点相较于前面,多了许多,包括各种新的数据类型,如需要返回boolean类型。其中还有涉及创建方法和对方法的调用,题目难度上来说较为容易,只是涉及许多的逻辑和测试,需要创建多个方法,其中包括对闰年的判断,并且需要返回boolean类型;还有对于输入的日期(年,月,日)是否符合题目要求;以及最重要并且最麻烦的一个方法求下一天,这就包括许多方面了,下一天涉及到天数,月份,和年份,对于这三个都有要求,下一天,可能是下一个月,甚至下一年,这就需要多个判断语句来实现这些功能,并且由于一年12月的天数各有不同,还有闰年和平年在2月天数的区别,就需要构造多个数组来实现,如月份数组month[],以及天数数组day[]。由于多个方法,并且涉及年份,还不能使用java中和日期相关的类和方法,就显得有点麻烦,所需要写的代码就挺多的,不过只要你理清了逻辑思路,写起来还是很快的,总体来说不难。
(2).设计与分析:
Main类包含:
- public static void main(String[] args);//主方法 如图:
![]()
其中Main方法主要包括对年、月、日数据的输入,以及调用nextDate方法,达到求得下一天的目的
- public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型 如图:
![]()
通过对闰年的判断,进而判断闰年和平年的天数的不同,以及两者2月天数的差别
-
public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值 如图:
![]()
-
public static void nextDate(int year,int month,int day) ; //求输入日期的下一天
如图:![]()
![]()
![]()
![]()
需要对年份和月份所在的天数进行判断,是否下一月或者下一年,如全无则直接下一天。
输出的格式:
1.当输入数据非法及输入日期不存在时,输出“Wrong Format”;

2.当输入日期合法,输出下一天,格式如下:Next date is:年-月-日

(3).采坑心得:
这里坑方面涉及较多,闰年判断较为简单不必多说,而在判断日期是否合法,就很多坑了,首先你的创建一个月份数组,包括一年十二个月分别的天数,

而且你判断完闰年或者平年后,其2月的天数便要进行相应的改变,可以使用一个判断语句来执行这个命令,判断是否是闰年,是,便将29赋值给数组2月,否,便跳过。

在求下一天,等你达到月末或者年末且月末的时候,这边需要月份或者年份进一,

其他注意点格式便可以了。
题目集02中的7-5 求下N天
(1).这个所涉及的知识点和7-4的差不多,并且也是7-4题目的衍生版本,算是求下一所有天数的一个完美公式。不过还是有点区别的,对于输入的要求有区别,上一题需要输入的是大于0的整数,而这一题包括大于0和小于0,在某些方面就体现出了区别,大于0便是天数往前推,反之,小于0便是天数往后推。这里就涉及到前面题目所不包含的层面了,那就是年份和月份的前移,相较于前题,需要对正负的判断,以及使用abs方法对输入的数据绝对值化,代码方面和7-4差不多,只需要在某些判断语句上面加以修改,便可以实现求下N天。
(2).设计与分析:
Main类包含:
1.public static void main(String[] args);//主方法
如图: 参考7-4
其中Main方法主要包括对年、月、日数据的输入,以及调用nextDate方法,达到求得下一天的目的
如图: 参考7-4
2.public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型
如图: 参考7-4
通过对闰年的判断,进而判断闰年和平年的天数的不同,以及两者2月天数的差别
3. public static boolean checkInputValidity(int year,int month,int day,int n);//判断输入日期是否合法,并且需要判断输入取值范围[-10,10]是否合法,返回布尔值
- public static void nextDate(int year,int month,int day,int n) ; //求输入日期的下N或者前N天
需要对年份和月份所在的天数进行判断,是否下一月(上一个月)或者下一年(上一年),如全无则直接下N天(前N天)。
输出的格式:
1.当输入数据非法及输入日期不存在时,输出“Wrong Format”;
如图: 参考7-4
2.当输入数据合法时,输出“n days ago is:年-月-日”
输入n大于0时,求下n天

输入n小于0时,求前n天

(3).踩坑心得:
与7-4没太大区别,就是需要注意输入数据的取值范围,进而对其进行改变。
第三次作业
3.题目集03中的7-2定义日期类
(1).这个所涉及的知识点包括对数据的私有,使用private(私有属性)可以实现,这样就可以保证程序的安全性与封闭性。其中需要定义一个Date类,包含三个私有属性年(year)、月(month)、日(day)。题目介绍的较为简单,由于运用到私有属性,这就需要用getter和setter方法用于保护数据,特别实在创建类时,对于每个实例变量(年、月、日),getter方法将返回其值,而setter方法将设置和更新其值,这就需要使用关键字this来引用对象(年、月、日)自身。在数学类逻辑方面其实依旧是较为简单,只需要仔细控制到题目范围内,那么写代码将会很容易,并且这道题与第二次作业中的7-4息息相关,可以说差不多,就是多了个私有属性,让其更具有保护性,格式要求也很简单,所以这道题难度不大。
(2).设计与分析:
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 如图:

输出格式:
• 当输入数据非法及输入日期不存在时,输出“Date Format is Wrong”;
• 当输入日期合法,输出下一天,格式如下:Next day is:年-月-日
getter()方法返回其值,而setter()则是引用对象自身
如图:

public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型
如图: 参考7-4
public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值
如图: 参考7-4
public static void getNextDate(int year,int month,int day);//获取下一天
如图: 参考7-4
(3).踩坑心得:此题与作业2相比多了个私有属性对数据进行保护,其他并无太大差别
题目集03中的7-3 一元多项式求导(类设计)
看到这道题时,并且包括他的题目要求和内容时我已经晕掉了,可以直接说这道题对于我来说难度很大,因为它涉及到并且只能使用正则表达式,不能够使用其他的方法去求导,这是以前从来没有接触到过的,老师也没有讲过,这就需要靠自己去自学才能明白,但是正则表达式,对于我来说真的比较难懂,看了半天也摸不到边,只能凭借老师的提示和例子,过了将表达书输入的测试点,其他就无法下手了,想了许久还是没有头脑,需要写入的代码也稍微多了些,还包括各种判断,较为复杂,难度较大。
作业总结:对于这三次作业,我想说我学到了很多,如私有属性、正则表达式、以及各种各样的方法,我受益匪浅,并且我发现在许多方面java与c语言有许多相似之处,这也便于我能够快速的学习java,而且这三次题目难度由浅入深,越到后面越有挑战性,但是我不能很好的完成,总是会出现错误,达不到全过的地步,这也让我认清了自己的实力,自己还不够努力,需要去更深的学习,提升自己的实力,因为java是我们专业最基础的专业课,必须要学好,对于我来说,对于方法的调用还有些生疏,并且在考虑内部类和外部类该用哪一个好,这就需要我去向这些








浙公网安备 33010602011771号