java第一次总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java第一次总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6563字,纯文字阅读大概需要10分钟。
内容图文
目录一、前言
1.第一次题目集的题目数量多,但是单个题目的代码行数较少,更加倾向于语法知识,对于我来说题目较为简单,完成时间短。
2.第二次题目集的数量开始减少,题目难度加大了少许,题目考察的不仅仅是我们的基础语法,而且还有我们的算法知识及Java的类与对象,相较于第一次题目集,不仅我们的代码行数在加多,所用到的知识点也在加多,对于我来说,题目难度一般,完全能自主做完。
3.第三次题目集的数量更少了,虽然只有三道,但是这三道题目都是对于类与对象的应用及部分新知识的应用,让我知道了语言中不只是简简单单的循环语句,判断语句。前两道题目是对于前两次题目集的总结的结果,验收了前两次题目集的成果并进行了适当的加深。第三道题则是要求我们加上对于正则表表达式的学习和应用,虽然对于正则表达式的应用只是较为浅显的部分,但是也让我学到了很多东西,这道题的难度远远高于前面的题目,对于自己来说,花费时间较长,让自己知道了学习语言知识的难度。
二、设计与分析
1.第一次题目集7-8题目
该题目要求我们根据输入的三个数字判断是否能构成三角形且能构成什么三角形。这对于我来说,无非是基础语法的判断语句 if else 的使用。
如下图:
先判断是否能构成三角形,在进行等边,等腰直角,等腰,直角,普通三角形的判断。最开始时,我首先判断的是等腰,在判断它是否为直角三角形,但是这样后面很麻烦,还要进行直角三角形的判断,代码行数多,且思路复杂,结构乱。于是重新改写后使用以下代码,结构相对简单。这道题我遇到最大的问题为double类型数精度的判定,这道题目doubel类型数进行了平方运算,导致了精度问题,最开始时,我的思路为直接相等,但是测试点过不去,经过查询后得知,判断double超多位小数时,应考虑精度问题,及默认为两数相减小于0.000001时为相等,这是因为double为二进制计数,会产生精度丢失。第一次遇到这种精度问题,对我帮助很大。
下面图为分析图:
该题复杂度控制在10以内,没有太大问题。
2.第二次题目集7-4题目
该题目要求我们计算输入日期的下一天,这很明显就是考虑特殊情况,比如跨年、跨月的时候,及每年的二月份,如果使用 if else 将会很复杂。所以,我直接使用一个数组,将每月的天数进行储存,这样在以后的运算中会非常的方便,如下图:
首先进行的为闰年判断,因为在输入检验时需要判断天数,所以先将二月份的天数判断出来,如果闰年,就将数组中的二月份改为29天。再进行错误判断,这会使的程序更加简单,也不会影响后面的程序
这里再进行判断下一天的时间。从天数开始判断是否会跨月份,再判断是否会跨年份。这个题目单纯是考虑月份的请特殊情况以及使用数组去规避判断语句的使用,也初步使用了方法。
如下图分析:
最大复杂度只有4,相较于使用判断语句的几十复杂度,这种方法显然更加优良。
3..第二次题目集7-5题目
该题为7-4题目的加强版,该题求输入的日期和整数n,求前n天的日期。相较于题目7-4,这题考虑多一点的就是日期对n的加减情况,可能为正,可能为负。及只用考虑修改7-4题目中对求下一天的方法,如下图:
对于n,天数直接进行加减,算出后,根据实际每月天数情况,考虑是否跨了月份,最后考虑是否跨了年份,例如:当计算后的天数为负数时,就倒退到上一个月,大于该月份天数时,则前进到下一个月。月份也是如此,小于或等于0时则后退一年,大于12时则前进一年。该题目和7-4一样,考察的是我们对于月份的处理和对于特殊情况的判断,不过这题的特殊情况更加的多样性,不仅仅要考虑月份的天数,月份向前跨月,年份向前跨年,还要考虑月份向后跨月,及年份的向后跨年,完成这题需要我们充分的考虑每一种情况的发生,体现了我们应该学习的严谨思维。
下图为分析图:
复杂度为7,这为什么和7-4题目差不多的思维但是复杂度却多了3,原因在于使用了更多的if else 语句,导致复杂度升高。所以我认为除非必要,否则少用判断语句的嵌套。
4.第三次题目集7-2题目
这道题目的要求也是求下一天,但是要求我们做成一个类,开始我们面对对象程序设计的正式学习。相较于第二次题目集 的7-4题目,这道题目不再是要求我们把日期做成一个方法,而是一个类,以创建对象的形式去使用它,于是具体算法不变,只是将方法拆开,做成一个日期类,如图:
类中的属性全部定义为私有属性,使用带参的构造方法给它们赋值。
也可以利用getter setter 方法进行赋值。
这里的方法与之前的一样,不过是将它们写在了日期类中。
创建对象并且调用方法实现功能。题目本身没什么困难,只是将我们的代码书写变得更加的规范,更加接近面向对象设计。
下图为该题分析图:
复杂度较低。
该类图说明了我从主函数中调用了Date类的对象,初步使用了面对对象设计。
5.第三次题目集7-3题目
· 该题目要求对输入的表达式做出判断,在进行求导。这道题目如果使用if else 语句进行判断,则复杂度将会直线上升,但是使用正则表达式就不会,我的思路是首先使用正则表达式进行判断输入是否正确,再利用正则表达式进行匹配,将每个项分离出来,单独进行求导处理,最后进行组合。这题的关键就在于正则表达式的使用。如下图:
利用正则表达式进行匹配每一项是否符合输入要求。
正则表达式去分离每一项及项的系数、指数 , str为项的表达式,str1为系数的表达式,str2为指数的表达式。使用group()函数进行提取。
最初在进行求导运算时,并没有考虑到大数问题,于是输入较大数字时,求导运算错误,最后使用BigDecimal对象进行大数运算得以解决问题。
分析图如下:
由于使用了正则表达式,运算复杂度每个类都很低,符合要求。
根据类图,我是将这个程序分成了五个类,主类、分离类、函数类、判断输入类、求导类;每个类都只有一种功能,但是结构我认为还能改进。
三、踩坑心得
1.语法错误:对基础知识的运用不到位,有时出现语法错误后会浪费很多时间进行查找修改。例如:在进行类参数的传递后,使用原参数进行操纵,但是原参数没有发生改变,导致程序一直可以运行但结果出错。
2.关于float、double精度问题,由与 这两者是二进制进行存储数值的,会造成精度误差,导致问题出现。例如:第一次题目集中的7-8题目,判断直角三角形最开始时我使用的为aa+bb=c*c;三者都为double类型的数值,当我输入三个能构成直角三角形的多位小数后,运算结果却不是直角三角形,问题出在double的精度缺失。如图:显示结果改为等腰直角三角形
这时,将它精度变得模糊一点,及两数相减小于0.000001则两数相等。结果正确:
3.正则表达式group()函数使用错误:group()函数可以将匹配到的字符串提取出来,我第一次直接使用了该函数,导致语法错误,经过上网查询,知道了group()函数的使用必须在find()等查找函数之后,只有先找到符合该表达式的字符串,才能进行提取。
4.类之间的设计问题,虽然不会影响程序的运行,但是不符合面向对象设计原则,有待改进。
四、改进建议
这三次题目集中,我觉得就是寻练我们对基础知识的掌握和使用,在后面学习了正则表达式之后,我认为前面的输入判定都可以直接使用正则表达式进行判断,减少if else语句的使用。最应该改进的应该为第三次题目集的7-3题目,该题目将类与对象的设计交给了我们自己,而我 对于类的设计只停留在表面,导致类的设计存在问题,类与类之间的关系处理也不恰当,可以继续完善,但是根据现阶段学习内容,改进还无从下手。
五、总结
经过三次的题目集训练,加强了对于Java语言基础知识的运用,学会了根据需求设计程序,实现功能;第三次题目集让我们开始了类与对象的设计,学习了新的知识,例如:正则表达式和大数运算。了解了自己在对于设计上存在的不足,自己无法很好的设计类与类之间的关系,这方面应该加强学习,但是这不是能一下学来的,会在以后的时间里严格要求自己,去培养设计的思维。不足之处还在于不会使用一些查找错误的方法,导致在题目出错后浪费大量时间去修改错误,基本大部分靠着实验,很难一下排除错误,应该去学习查错的方法,提升学习效率。
内容总结
以上是互联网集市为您收集整理的java第一次总结全部内容,希望文章能够帮你解决java第一次总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。