pta题目集1-3总结
一、前言
题目集1主要是对java的基础知识点进行了训练,共8道题,题目量有点多。知识点包括基础的程序的输入与输出,字符串的使用和其中的一些方法,条件语句和循环语句的使用,第一次题目集的7-5还涉及到了数据类型的详细使用,并且提到了强制类型装换。7-6提到了数组的创建和使用以及数组的遍历,并且相对于c语言,java有更简洁也更方便的数组遍历方式。题目集1的难度一般,主要考察了对java选择结构和循环结构的使用。7-4的计算税率涉及到的知识点不多但是要写的步骤比较繁杂但单一,题目信息比较大,个人觉得意义不大。对于题目集1,主要详细分析题目7-8判断三角形类型
题目集2相对题目集1来说,题目量少了3道,但是难度却大了不少,感觉直接上了一个台阶。涉及的知识点主要有字符串的使用与其中的一些方法,有用substring方法截取字符串中的一部分,还可能涉及了一些Math方法的使用。另外,在7-2中也涉及了数组的使用。后面三题的难度稍微有点大,新增了自定义方法的使用,同时后面3题涉及了之前作业的所有知识点。题目内容较多,做题时要逻辑清晰,仔细审题。对于题目集2,主要详细分析题目7-4:求下一天和7-5:求前n天。
题目集3开始对java的类有要求了,题目不多,但需要创建类并定义类中的属性和方法涉及了类的一些知识点,创建类的对象,类的封装性的体现和在主函数中调用类的方法,构造函数的使用等等。主要分析题目集3中的7-2定义日期类和7-3一元多项式求导(类设计)。
二、设计与分析
第一次作业7-8:判断三角形类型
此题的要求是:输入三角形的三条边,并判断该三角形是什么类型的三角形。
首先分析这道题,想到的方法自然是利用选择结构,通过不断地分支来判断不同类型的三角形形状。一共有这几种输出情况:不能组成三角形,组成等边三角形,组成等腰直角三角形,组成等腰三角形,组成直角三角形,组成一般三角形。由于情况较多,所以逻辑要清晰,要弄清楚各个条件的包含关系,这也是这道题主要的难处。
在判断各个条件的包含关系时以及判断顺序时,我的最终方法是:先判断数据的合法性,之后首先判断输入数据能否构成等边三角形,若不能,在同一个层次用else if依次判断等腰直角三角形,等腰三角形,直角三角形。最后的情况下自然是普通三角形。输出并不是主要考点,所以这里就不赘述了。代码如下:

第二次作业7-4:求下一天
此题的要求是:输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 并且不允许使用Java中和日期相关的类和方法。
分析这道题,显然需要使用java自定义方法,使用自定义方法要注意两个点:一是注意方法的参数,二是注意方法的返回值。需要定义的方法有:判断闰年的方法,判断输入日期是否合法的方法,求输入日期下一天的方法。
判断闰年的方法比较简单,但是要注意要定义boolean类型的返回值
代码如下:

判断输入日期是否合法的方法主要是要排除输入的数据中那些年份不在18202020间的年份,月份不在112之间的,日不在1~31之间的,以及平年2月29日的情况,如果输入数据有误,此函数将返回一个标记供主函数使用。
代码如下:

求输入日期下一天的方法中要严格区分平年与闰年,使用判断平年闰年的方法,并创建两种年份的不同数组,判断特殊情况入手:输入的是否日期为数组中的元素,即输入日期为该月最后一天,若不是,下一天的日期年月不变,日期+1;若是,再判断是否该月是否为12月,作简单处理即可满足题意。此题中的求输入日期下一天的方法逻辑性比较强,分支结构判断顺序要注意。

主方法中输入数据并且调用之前的方法即可完成。
第二次作业7-5:求前N天
此题的要求是:输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。
分析这道题,与之前7-4有很多相似之处,显然还是需要使用java自定义方法,使用自定义方法要注意两个点:一是注意方法的参数,二是注意方法的返回值。需要定义的方法有:判断闰年的方法,判断输入日期是否合法的方法,求输入日期前N天的方法。
判断闰年的方法比较简单,但是要注意要定义boolean类型的返回值
判断输入日期是否合法的方法主要是要排除输入的数据中那些年份不在18202020间的年份,月份不在112之间的,日不在1~31之间的,以及平年2月29日的情况,如果输入数据有误,此函数将返回一个标记供主函数使用。
求输入日期前N天的方法中也要严格区分平年与闰年,使用判断平年闰年的方法,并创建两种年份的不同数组,先用一个变量储存现在的日期与输入的要求的前N天的差值,之后与7-4相似,判断特殊情况入手。分支结构也与7-4相似,所以就不在赘述,代码也不展示出来了。此题中的求输入日期下一天的方法逻辑性比较强,分支结构判断顺序也要注意。
第三次作业7-2:定义日期类
此题的题目要求为:定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法
分析这道题,内容与求之前7-4求下一天几乎一模一样。所以唯一的不同就是形式不同,此题要求使用类的知识,需要自己定义日期的类,并使用与类的相关的知识点。要注意的是,定义的属性要写成私有属性,并且要写set、get方法调用。类中要包含属性有:年、月、日,和之前类似题中的方法,与之前那道题目相似,只是方法写在类中罢了。这里代码就不展示了,大同小异。
第三次作业7-3:一元多项式求导(类设计)
此题目的要求是:编写程序性,实现对简单多项式的导函数进行求解。题目要求如下:
(1)实现功能
⚫ 判定输入表达式是否为正确的表达式;
⚫ 若输入为正确表达式,则计算其导函数并按要求输出。
(2)输入输出规则
①输入规则
在一行内输入一个待计算导函数的表达式,以回车符结束。
②输出规则
⚫ 如果输入表达式不符合上述表达式基本规则,则输出“WrongFormat”。
⚫ 如果输入合法,则在一行内正常输出该表达式的导函数,注意以下几点:
➢ 结果不需要排序,也不需要化简;
➢ 当某一项为“0”时,则该项不需要显示,但如果整个导函数结果为“0”时,则
显示为“0”;
➢ 当输出结果第一项系数符号为“+”时,不输出“+”;
➢ 当指数符号为“+”时,不输出“+”;
➢ 当指数值为“0”时,则不需要输出“x^0”,只需要输出其系数即可。
分析这道题,同样是类设计,但是此题的难度相比之前的,要复杂的很多。并且要运用处理字符串的语言:正则表达式。这对于我们这些java初学者是一个浩大的工程,需要自学并且熟练运用这个知识点。
三、踩坑心得
在第一次作业7-8题判断三角形类型中,之前没有注意if,else使用中条件的包含关系导致程序总是有测试点出错,不完美。后来在本子上冷静画出每种情况的韦恩图,总算解决了。心得:分支情况较多时,逻辑要清晰,要弄清楚各个条件的包含关系,同时范围小的先判断,画韦恩图是个好习惯,直观明了。
在第二次作业7-4题求下一天中,我遇到的问题主要是判断输入日期是否合法的判断,疏漏了平年2月29日的情况,解决以后我了解了遇到问题要从不同角度思考。同时数组接受一年的12个月天数是很不错的想法,只要用一个数充当0位置,就可以用月份当序号直接索引月份天数,大大提高了代码精简度。
四、改进建议
代码的排版要注意,好的排版对于程序的查找,程序的检查有着重要作用,并且能大大提高代码的可读性。
五、总结
通过这三次题目集的练习,我感觉自己对java程序的代码风格和相对c语言的不同之处有了特别的感受。了解了java的封装性,和java的基础知识。同时还学会了一门强大的处理字符串的工具:正则表达式。不仅如此,代码的调试也逐渐被我所重视。这是一个很强大的功能。能帮助我们迅速找到错误与帮助我们整理清楚代码的运行方式。Java编辑器相对于c语言更加方便也更加智能。同时希望后续的学习,java能带给我更多的新知识与新技能。
浙公网安备 33010602011771号