第一次总结行Blog
1、前言:作为刚开始学习Java的课程训练,虽然和C语言有许多我认为相似之处,但前一个月的题目集就已经让我感觉到了两者的不同。前两次题目集可以完全使用C语言的思想来完成,但第三次的题目集明显就让人感觉到了java在某些方面的好处。作为基础性的铺垫,前三次题量和难度都不是很大,但也不是很容易就可以解决的。。。。在这里面还是花了些功夫的。
2、设计与分析:
1)题目集1的7-8:题目要求对输入三角形的三条边,判断该三角形是什么类型的三角形。且给出了各种输出格式。对此题,我根据输出的格式对各种情况输入的三条边进行判断,运用简单的if-else语句对三条边进行简单的判定,同时通过三角形形成的各种条件对三条边形成的图形进行判断,但同时因为全是用if-else语句,所以圈复杂度也高,而且题目的条件要求逐层递增,所以使用了if-else语句进行判断,当时自己想到的就是这种最简单的方法了

2)题目集2的7-4:题目要求输入年月日的值,输出该日期的下一天,且对年份的合法范围进行判断,题目给出各类Main类中的方法,让我们对这些方法填入自己的代码。对于这题的要求,题目给的很具体,就是完全对方法进行补充,这题的设计也十分明了,先判断对输入数据的合法性进行判断,成功再进行下一步的操作,判断闰年的方法同样也是对合法性的补充,例如正常2月29的输入肯定是不行的,但是对于闰年的情况,这种情况又是符合条件的,所以再这函数可以用于判断合法性,和下一天中使用,如闰年2月28日的下一天是2月29,而平年的2月28下一天就是三月一号了。而再判断下一天中,由于要实现这一天是否是月份最后一天,或者是年份的最后一天,我用数组对十二个月的天数进行存储,不用根据输入而一个个判断,可以让输入天数和数组中的数进行比较,减少了圈复杂度。
3)题目集2的7-5:题目要求输入一个年月日,再输入一个在取值范围内的整数,求所输入的年月日的前n天,n为你后面输入的数。同时年月日也有规定范围。和上个题目类似,先判断所输入数据的合法性,符合题目规则则进行下一步的判定。同时题目给出的整数有正有负所谓负负得正,输入负数时,我们就要给出后|n|天的数据,使用我们要对输入的n进行判断,当他时正数时,有一串代码,是负数时,又是另一类代码。由于又是和日期有关,判断闰年的方法仍然需要用,和上题有异曲同工之处同样使用数组和所输入数据进行对比,然后进行操作

4)题目集3的7-2:使用类的方法对下n天进行处理,题目的做法和题目集2中的7-4差不多,只是需要用到类的方法,不能完全使用C语言中的知识解决问题,在C语言的基础中加入java的思想,但解题思路和题目集2中7-4差不多,也是需要判断输入n的正负进行处理,在处理上也差不多相同,只是用类的方法进行封装和传参等实现,剩下的完全可以使用题目集2中7-4中的思想和算法和思路
5)题目集3的7-3:作为第一个月的终极boss前面两题花了一天时间,最后这题花了9天,还没全部完成。题目给出了详细的解释,包括合法性的判断,系数为1,-1,指数的各类情况,还有些可省略的等等,同时使用上了正则表达式,让本就头大的我雪上加霜,本题思路,先用正则表达式对输入的字符进行判断和截取,对输入的字符串进行基本规则的判定,且由于字符串中有空格,所以需要先对字符串进行去空格处理,然后再进行截取和判断,再将截取的每个片段根据属于幂函数,指数为1,-1,系数为1,-1,等进行各种数据的处理,还有最开始的第一个数,如果是正数,那么他就不会有正号,这些都需要一个个进行判
断
3、采坑心得:
1)题目集1的7-8:作为第一次作业,题目难度不高,但是在判断等腰直角三角形时,因为有一条边他的数字一定不是有理数,所以在计算机中,不可能出现完全相等的情况,只能是约等于,所以这其中就不能用两边平方和等于第三边的情况进行判断,而是需要,两边平方和减去第三边平方小于十的五次方才能通过测试点,由于一开始没考虑到这个问题,所以一直没过,还是室友吐槽测试点时得到的启发。
2)题目集2的7-4:题目要求给的十分详细,所以在完成时没遇到什么问题,算是比较轻松的一题,注意不要漏掉某些特殊情况就可以了
3)题目集2的7-5:和上题差不多,只是加了个判断n的正负,然后进行代码的实现过程,也是比较轻松一题,在写的过程中没什么错误,问过其他同学对于月份的对比,有些人用的是switch-case进行对比,我用的数组可能更轻松点
4)题目集3的7-2:题目和题目集2的7-5差不多,用了类的方法,而且老师特别要求用类的封装性,唯一的难点可能就是没了解到类的处理的时候,不知道如何对数据的传入和传出,以至于在一知半解的情况下,输入了数,但是没有输出,但在了解了如何使用之后,题目的难度就大大降低
5)题目集3的7-3:题目难处很多,一个是如何正确使用正则表达式对输入字符串进行截取,然后给类函数的处理方法又各不相同,而且还有几组大数据的处理,需要使用到BigInt的方法进行处理,所以需要处理的东西很多,导致我在写过一些代码后,想对代码的改进变得很艰难,不知道该从和出下手,主要框架一开始没有建好,而且正则表达式的使用不是很好,导致正则表达式又臭又长,而且因为情况很多,写了好多以后就看起来很复杂,我代码中对单个x的n方处理不出来,但是加在一串数据中又可以正确的输出,导致后面我写题很困惑,越写越不想写。所以一个好的框架真的很重要,之后的题目把框架一定打好来,这样写的自己也轻松,也知道什么地方错误。
4、改进建议:
1)前两题题题使用的都是C语言思路,很直白,没什么好说的,改进方面也是对于圈复杂度的改善,少用if-else语句,也没什么好改进的
2)题目集2的7-5:这题用的也是比较直白的思路,改进地方可以用switch语句减少圈复杂度
3)题目集3 的7-2:由于算法和前面类似,可改进的地方也差不多相同
4)题目集3的7-3:可以将各类字符分开处理,这样的可以随时增加各种类型的函数的处理,由你输入的函数,进行每种函数的求导处理,这样的情况可以处理将除了一般的函数求导以外,还可以增加对所需函数的求导,想对什么求导,就用什么函数,正负号的判断也可以拿个方法来进行处理,还有系数的处理,例如1,他是不显示的,那么这种情况也需要来判断。还有-1的情况,-1他显示出来的数字只有负号而没有1,所以这种情况也需要判断,或者找个方法对这两类东西进行处理,直接将他们写成+1或者-1然后和正常的函数一起进行判断
5、总结:前两个题目集带我进入java的世界,让我了解了他的输入输出,感觉和C只是写法不同,但第三次的题目集才让我真正感觉到了java的知识,学会了最简单的输入输出,学会了类的封装性,学会了一点点正则表达式,同时圈复杂度也让我认识到了自己代码的不足之处,毕竟这种代码也只有自己在现阶段洋洋得意一下下了,发现了许多方面的不足,比如在求导题目中,有个去除空格的函数,之前还傻傻的一个个处理,最后发现居然有函数可以如此简单的完成这项工程,顿时觉得,需要学习的东西还有好多,本来掌握的基础就不咋地,还是需要更加多的学习和查找各种所需要的函数运用,在完成一项事情之前,不是说直接用自己所学的知识去蛮干,而是先找有没有更加简单有效的方法可以去处理这件事情,可能这就是java所带给我的东西吧,因为他所包括的东西真的很多很多。
改进建议:emm随堂作业最好可以简单那么一点点,有次处理一个字符串的问题,直接从四点写到了晚上十点,让本就有点累的课程雪上加霜,老师讲课总利用现实例子给我们作解释,我个人认为很可以,没什么好建议的。

浙公网安备 33010602011771号