其他分享
首页 > 其他分享> > 题目集1~3的总结性BLOG

题目集1~3的总结性BLOG

作者:互联网

 

(1)   前言:

  1. 第一次题目集考察Java的输出方法,判断方法,排序方法。题数为8道,但代码量不大。总体来说难度不大,就像是在练手,熟悉熟悉打代码的感觉。
  2. 第二次题目考察类与对象,字符串的处理,数组的使用。题数为5道,代码量和第一次差不多。难度较易,但关于日期计算方面的分类情况有些复杂,仔细点就还好。
  3. 第三次题目考察类与对象,字符串的正则匹配。题数为3道,第一题练手,第二题是将第二次题目的第四题结构改成类方法写,第三题求导很难,要考虑的情况有很多,想了很久始终没完美解决符号问题。

(2)   设计与分析:

1.

上图为第一次题目集分析。

下面分析一下题目集一的7-8:

7-8:

由图可知,我写的题目集1的 7-8代码复杂度为11,复杂度偏高,原因是用了大量的if及if嵌套语句判断三角形的形状,导致复杂度激增。

2.

上图为第二次题目集分析。

下面分析一下题目集二的7-4、7-5:

7-4:

由图可知,我写的题目集二的7-4代码复杂度为32,复杂度比题目集1的 7-8高了许多。其原因是题目需要判断的情况太多,大量使用if语句判断,还有if的嵌套(尤其是关于闰年二月的判断),使得复杂度刷刷直升。也有用数组和switch的方法,这种方法复杂度较低,但我没写出来。

7-5:

由图可知,我写的题目集二的7-5代码复杂度为50,复杂度比题目集二的 7-4高了更多。题目集二的7-4、7-5类型差不多,都和计算日期有关,它们都是基于题目集二的7-3而来。

但题目集二的7-5比之于题目集二的7-4来说还多了前几天和后几天,要更多次的判断是否为闰年二月。

3.

上图为第三次题目集分析。

下面分析一下题目集二的7-2、7-3:

7-2:

由图可知,我写的题目集三的7-2代码主类复杂度为3,Date类复杂度为27,还是和以前一样,用了大量的if语句使得代码复杂度较大。题目主体思想和题目集二的7-4是一样的就是写法上略有不同(就是要构造一个类)。

7-3

由图可知,我写的题目集三的7-3代码主类复杂度为4,Derivative类复杂度为12。说实话起初不知道如何使用计算机编程去求导,因为需要求导的式子都是字符串类型的多项式,如何把他们拆分倒是费了很大一番功夫。当然,首先是实现非法测试,和仅有常数项的情况。之后先用String.replace(“ ”,“”)除去字符串里的空格用正则表达式写出了(\\-|\\+)?\\d*\\*x\\^(\\-|\\+)?\\d*|(\\-|\\+)?\\d*\\*x这一串特别长的式子进行判断,再用String.find()、String.group()将多项式拆分为单项式。之后把字符串的所有符号给去掉,再判断字符串是不是为空,如果不是空的话,就把字符串里的数字相乘,并且记住字符串里有多少个数字,如果数字为1的话,就直接输出那个数字,最后就是按求导的格式来输出结果。

(3)   踩坑心得:

题目集一:

7-2:起初忘记在判断字符范围的时候忘记给限定范围的字符加上单引号(如a>='a'&&a<='c'写成了a>=a&&a<=c),导致报错。后来又忽视了大小写问题(如a>='a'&&a<='c'||a>='A'&&a<='C'写成了a>='a'&&a<='c'),导致部分结果错误。

7-4:当初写这道题的时候,因为一些粗心问题导致计算错误(如tax = 16700*0.1+51200*0.15+69150*0.25+71800*0.28+164100*0.33+(rate-372950)*0.35;中的71800写成了89300,就是复制第一种情况代码时没改好造成的),造成了输出结果部分不正确,后来是一条一条语句查,才查到的错误。

7-5:起初忽视了类型的转换,导致编译一直不通过(如teyuan = (int)money/10;起初没写(int))。

7-7:一开始在输出的时候忘记输出空格符(如System.out.print(num[i]+" ");写成了System.out.print(num[i]);)。

7-8:一开始忽略了Java中。浮点型的数会有些许误差,理论上相同的两个数在是浮点型情况下可能会不同,导致等腰直角三角形无法正确判断(如(a==b)&&((c*c-a*a-b*b)<0.1)可以正确判断,但(a==b)&&(a*a+b*b==c*c)不行),但神奇的是单独的直角三角形判断却不受此影响(在我电脑上是这样的)。

题目集二:

7-1:在用for循环分隔8位字符串的时候,循环终止条件没有写好,导致数组存入数据溢出(如for(i=8,j=0; j<8; i++,j++)写成了for(i=8; i<16; i++)事实上数组仅能存8位),程序报错。

7-2:这道题也是for循环的终止条件没有写好,导致只输出了前面一部分数据(如for(i=0; i<one+two; i++)写成了for(i=0; i<one; i++)。one即第一个数组长度,two为第二个数组长度)。

7-3:关于闰年2月这方面。刚写的时候并没有判断好。导致输出星期错误。再通过返回的余数求星期几的时候,把case的对应星期搞错了(一周),导致输出错误。还有,一开始忽视了月份日期不同情况(例如4、6、9、11月和1、3、57、8、10、12月的日期不同),导致判断的时候出现了4月31号的情况,也没有输出Wrong Format或者把月份加一,日期回到一的情况。

7-4:把题目集二7-3拿来修改了一下就过了。

7-5:刚开始写的时候没有把年月日另存到另一个新的对象中,导致月份或年份一直在不停的变化,最后判断的不是最开始的那个年或月份,导致输出结果错误。(int year = in.nextInt();int month = in.nextInt();int day = in.nextInt();int num = in.nextInt();int nday = 0,day1 = 0,month1 = month; 比如说原来输入的是4月30号,往后8天就是5月8号。但由于是直接变动的初始月份,所以接下来会变成5月16号,直到12月份为止。)

题目集三:

7-1:这道题我踩了好几个坑,第一个就是创建特定初始余额的构造方法。我以为他的初始余额是默认两万,后来发现并不是这样的,而是自己输入的任意数。第二个就是对于存储数额大于两万元的理解错误。我是以为是存储总数不能大于两万元,事实上它只是单次存储不能过两万元,余额大于两万元是可以的。第三个就是关于月利息的。我一开始以为他所说的余额是初始余额,后来发现并不是,而是最后计算出的最终余额。还有关于余额是两位小数的坑。如果不做任何限制的话,double型对象输出的余额是最大6位小数。

7-2:这道题踩的坑也是跟题目集二的7-3一样,没有新定义个对象,把输入的月份给传进去,导致月份在不停的变化。不停地进入下一个if判断。

7-3:这道题踩的坑就更多了。第一点就是符号问题。我在写这道题的时候,要么就是多输出个加号,要么就少输出个加号(如4*x^-3+60*x^11+-4)。或是出现了系数为负数的情况,可能会输出一个正号后面再加个负号。第二点就是关于正则表达式的判断问题。我所写的正则表达式,能判断正常的有系数指数的项,但对于没有系数有指数的项,有系数没指数的项,或者没系数也没有指数的项,这四类项总是不能全部正常判断,或是能正常判断,但在计算的时候就会出现一些奇奇怪怪的错误。第三类就是关于求导的方法。我的求导方法是将指数和系数拆分开来再相乘,但这样造成了一个严重问题,就是当系数或指数其一为一的时候,会导致指数系数无法相乘的情况(就是指数或系数去除x后。会出现读到空值的情况),无法求出导数系数。如果再加个if判断是否有指数或系数为1的情况,那又会出现其他的问题(就是正常测试点过不了。在自己电脑上能过,但在PTA上过不了)。

(4)   改进建议:

题目集一:

7-2:可将if判断改为switch判断

7-3:可将if判断改为switch判断,降低复杂度,但代码量会增加。

7-8:可尝试把非法判断的if给删去

题目集二:

7-1:这道题或许可以把用循环将字符串拆分换为直接拆分字符串的函数。

7-3:这道题也可以尝试把非法判断的那个if给去掉

7-4:尝试将对于月份的if判断改成switch case判断

7-5:可尝试将计算后的天数作为分类的依据,把月份用switch case来判断

题目集三:

7-2:这道题可以改为先非法判断,如果输入数据非法直接终止方法。对于月份的if判断改成switch case判断,将2月和12月单独加上if闰年判断。

7-3:这道题目的编码可以在正则表达式那里改改,还有关于符号方面的,或许要把代码重构,感觉自己目前写的加不了什么东西了,bug又多。

 

(5)   总结:

此阶段三次题目及我学会了类与对象、字符串的处理、java的输出方法、字符串与数组的混合运用和字符串正则匹配方法。在对于运用判断方法方面,我还有很大的不足。因为我就通常只用if来判断, Switch case方法还不太熟练。所以一旦代码的判断数量较多,我所写代码的复杂度就会非常高。复杂度分分钟破10。还有正则表达式那一方面,我还不太会运用,还要加强学习。Java的大数BigInteger方法也不会,需要加强学习。其他方面就没什么了。

标签:输出,总结性,判断,题目,复杂度,BLOG,字符串,集二
来源: https://www.cnblogs.com/Zi-Yao-OvO/p/14616910.html