题目集1~3的总结性Blog

blog作业总结

20201333-张柏明

(1)前言:

        前三次作业题目由易到难,且每次作业针对性都比较强,尤其是第二次作业和第三次作业。在这三次作业中,有难有易,也常常让我感到焦虑。不过更多的是要将自己压迫到一种学习的氛围当中去,让自己去感受那种编程的乐趣。只有不断努力学习不断获取知识,我们才能获得学习知识的成就感。

       前两次作业相较于第三次作业还是比较简单的,比较容易拿到满分。前两次作业基础性较强,作为初学Java者,通过查阅资料,基本可以解决。第三次作业中的一元多项式求导比较难处理,需要自学正则表达式,并且用到多种方法去解决。对我个人而言,最终还是没能完成第三次作业。这三次作业虽然时间在变长,题目在减少,但是题目的难度正在有着明显的提升,总之对个人的能力有着更多要求,更需要花费更多时间去学习。虽然三次作业做的程度不同,但作业都需要总结。接下来我将对我的几次作业进行总结。

 

 

(2)设计与分析:

 

 

 

 

题目集一的7-8

 

 

 

 

 

       图片显示该复杂度为21,从圈复杂度和软件质量的表中我们可以看到,我这个题的复杂度是非常高的,效率低,维护成本高。if else

语句使用过多,代码执行效率过低。如果要是想要改进的话,应该把if else语句去掉,换成数组或switch,便可以大大提升我们的编程效率。

题目集二的7-4

 

 

 nextDate()函数中复杂度最高,其中既包括if else语句又包括switch语句,每个switch语句中又包括if,程序就较为复杂。效率低。

题目集二的7-5

 

 

最大的复杂度为13,主要是在函数checkInputValidity(int y,int m,int d)中,switch语句中有if语句做嵌套,复杂度较高。

还有,对于此题我想进行一下关于类图的分析

 

 

 就一个类,类中有四种方法,其中isLeapYear(int y),checkInputValidity(int y,int m,int d)用的是Boolean型,图中我们便可以看的出。三个方法都可以在主方法中被调用。

第三次作业的7-3没有实现,思路也不明确,在此处便不予以说明,在后续的介绍中我将会对第三次作业出现的问题进行总结和反思。

       综上所述,这些问题都很明显。就是程序复杂度太高,程序执行效率太慢。属于垃圾代码但是之前也仅仅是为了简单,if语句逻辑性不是那么复杂。简单来说,之前写代码属于“图省事”,也没有想到会有那么高的复杂度。但后来听老师上课讲到了复杂度的问题,便开始思考很多问题,如何能够让程序变得简单方便,可使用性更高。这是我们作为程序员以后要思考的问题。


                                                                                              (3)采坑心得:


       第一次作业中,提交代码时经常会有编译错误,编译错误的问题比较容易解决。一般就是代码格式不符合要求。比如public class Main,类必须是Main,这是第一次提交作业时遇到的简单的编译问题。
       第一次作业的7-8题,判断三角形的类型,有一个函数需要使用就是Math.abs(),该函数用来判断等腰直角三角形。由于等腰直角三角形斜边为直角边的 √2倍,需要让斜边的平方减去另外两边的平方和小于0.000001,才可以判断出是等腰直角三角形。第一次作业相对来说比较简单,没有太多问题,主要是对Java的了解和熟悉的过程。
       第二次作业相对第一次作业,难度上有了很大的提升。不过和第一次作业相似,基本上代码都是在主函数里完成的,使用的方法和c语言相似。不同的是,我开始在主方法外定义方法,并且在主方法中调用自己定义过的方法。
在第二次作业7-3中就使用了isLeapYear(int y),numOfDays(int y,int m ,int d),String getWhatDay(int days)几种方法,其中判断闰年的isLeapYear(int y)函数是用Boolean型定义的。
        Boolean型定义判断是否为闰年非常方便快捷。让我们的编程效率得到了很大提高。
        第三次作业难度大有提升,前两题还好并不是太难做出来,第三题求一元多项式的倒数,我至今还没有实现。前两道题目类似,但也还是比较复杂,第三次作业是和类有关的。我们开始自己使用类来编写程序,比如7-1中让我们创建账户类,并要求使用私有属性。使用指定的方法,在这个题中,一共有两个类,第一个类中是主方法。账户类中有自己定义的属性,自己定义的方法。程序要求使用构造方法,一开始不怎么理解构造方法,不知道为什么要有个无参构造方法,还要有个有参的构造方法。构造方法原来是为了给类中的属性初始化,还有getter和setter方法,一开始都不是很理解,通过不断查阅资料才发现这种方法也是为了该类中的属性。
        第三次作业也不简单,了解了类和属性等概念。不过最后一个求导的题,可能就会相比前两道题来说要麻烦许多。我自己没有做出来这道题,这道题中把输入的一元多项式分解成单项式需要用到正则表达式。通过学习正则表达式仅仅把一元多项式分解成了单项式,这次学习正则表达式的过程较为缓慢,以至于后面的题目无法完成。
         这三次作业遇到的困难还是很多的,但很多问题可以通过查阅资料来解决,相信以后通过编码,以及不断地查阅资料可以提高自己的编程能力。


                                                                                                  (4)改进建议:


       比如说,第三次作业的第三题,我只对多项式进行了分割。但之后的主要思路都是在一开始的类中完成多项式求导的。我感觉做一个求导的题目,不应该只使用一个类,应该多定义几个类。比如说,定义一个多项式的类,再定义一个单项式的类。在主方法中实现,对多项式的拆分。在单项式中定义一元多项式拆分后的单项式的指数和系数,并套公式进行单项式求导。在多项式的类中对单项式求好的导数进行拼接,并在主函数中调用得到答案结果。
       以上方法是我个人想法,并还没有实现。但通过类的思路,可以让代码思路更清晰,可以延伸到以后的代码中去。类本身就是Java中的一种特殊用法。
       还有的就是选择语句if else,尽可能用switch,使用switch可以大概率提高程序运行效率。


                                                                                                      (5)总结:


       本次博客作业意义很大,对我们来说是一种很重要的总结自己的机会。以下是我对此次博客的内容进行总结。
       首先,这次作业的总结是我们本学期Java学习中的第一次系统性的学习分析总结。第一次作业时,我们初学Java,对Java的语法都不是很了解,就是通过听大学慕课上的Java入门,学习到了键盘输入,打印等基本知识。通过这些基本知识,发现第一次题目集并不难写,可以迎刃而解。通过第一次作业,我学习到了一些知识。比如System.out.println()可以用来打印, Scanner in=new Scanner(System.in)可以用来键盘输入,int.n=nextInt()用来定义输入的整形数。第一次作业做完还是比较轻松的。学习一些基本语句,思路和C语言比较接近。
       第二次作业,难度较大。第一题IP地址的转换用到了一些新知识。String a = in.nextLine(),int x = a.length(),一个是定义字符串,还有一个就是截取字符串的长度。c[i]=Integer.parseInt(a.substring(i*8, i*8+8))可以用来把32位的字符截取为四段,每段长度为八。7-2中需要用到合并数组,先对两组数进行排序,然后数组合并排序输出。7-4求下一天中有一个方法是nextDate(int y,int m,int d),在主方法中调用nextDate(y,m,d)。
       第三次作业,没有做完。十天时间,比较紧张。第一题用到了一个方法叫 DecimalFormat df = new DecimalFormat("#0.00")是用来保留两位小数的。其他方法已经在采坑心得中有所总结。

       这三次作业,每一次都是很有价值的,题目的难度梯度在攀升,也需要我们自己更多的去总结,反思。之所以老师布置博客作业来总结,是给我更多的时间去认识自己的不足,缺点,改正错误。三次作业搭配一次博客作业,我认为这种学习方法非常适用我们这个专业的学习,不仅能通过大量的实践提升自己写代码的能力。写完代码后,又有一定的时间消化知识点。争取在每一次的作业中都能够发现自己的问题,改进曾经出现过的问题,把每一次程序往好的去做。

       这几次作业最明显的感觉就是类的构造吧,我想,这也是老师要求我们必须要掌握的东西。通过学会类的使用,在学会多种函数中需要用到的方法,熟练运用。但前几次作业,发现自己并没有掌握好类应该如何使用。前几次作业,就第三次作业的7-2用到了类,并且根据题目中的要求给予类中属性和构造方法。在主方法中调用自创类中的方法。

       老师平时督促也很紧,但更多的还是需要我们自主学习。平时课程为线上线下双教学模式,老师上课讲的东西更具有针对性,对我们的作业有启发。而课下更需要自己去钻研,要有不怕累,不怕苦的精神。

posted @ 2021-04-04 15:55  zbm123  阅读(88)  评论(2)    收藏  举报