前言:前三次作业中,前两次难度适中,主要涉及对java最基础的使用,让我们对java有一个初步了解,题目量与难度成反比。第三次作业,难度大幅上升,只有三道题,但代码量比前两次加起来还要多的多,涉及对java中类与对象的使用。
关于java&面向对象
这学期第一次接触到java,第一次写blog,来对前三次作业来进行一个阶段性的总结。
对于java由于不太了解其特性一开始还是以c语言面向过程的方式去进行代码的编写,在第三次作业才真正了解到面过过程的方式。
先对java中近期了解到比较重要的进行分析,谈论自己的理解。
类(class):
1.开课时老师就对我们说过,java没有函数,java万物皆类。所以类其实算是java的核心概念。
2.类在java中类似于c语言中的struct结构体,可以构建一个结构体,其中有对应的属性(c语言中类似于参数)。
3.在类中还不止包含属性,还可以有其独有的方法(类似于c语言中的函数),但这个方法只限定于这个类,其他类要调用必须创建一个该类的对象。
4.类在面向对象起决定性作用,前期类的定义越好,后期对相应问题的处理就更游刃有余。
5.类可以互相串联有一定的关系,有依赖关系,关联关系,聚合关系,组合关系,在后来还会学习继承关系和实现关系。
对象(object):
1.我对对象的理解不算太好,书上定义中对象是实际存在的该类事物的个体,因而也称实例(Instance)。
2.类和对象就如同概念和实物之间的关系一样,类就好比是一个模板,而对象就是该模板下的一个实例。
3.对象由类产出,不同的类生产出不同的对象。有万物皆类的说法也有万物皆对象的说法。如:有一个人类的类,那么你和我都是人类创建出的对象。
属性:
1.属性包含在对象之中,分有类属性和对象属性。
2.属性类似c语言中的参数定义,如:人的姓名,年龄,身高,体重等数据都是人类的属性。
方法:
1.类似c语言的函数,在类中定义方法,给创建的对象提供特定的服务。
2.方法可以简化代码,提高代码的可读性,可维护性,可重用性,安全性。
3.举例描述方法,如班级类中,需要求班级平均分是一个方法。
关于java语法:
由于刚接触到java对语法还是有挺多不熟悉的地方的,在慢慢熟悉过程中。其中会碰到对其特定类的方法不理解,如:valueOf,Split等的不熟悉。
三次作业中遇到的BUG
此处就类举一下写作业中碰到的问题与bug
第一次作业:
1.使用Scanner类未进行Scanner类包的调用。
2.精度问题错误。
3.对print的使用中,前期多使用printf中遇到的报错。
4.print中字符串与对象中间的“+”问题报错。
第二次作业
1.对正则表达式的错误使用。
2.substring的取值错误。
3.字符错误。
第三次作业
1.正则表达式的错误设置导致的格式错误。
2.对类创建对象时,忘记new。
3.对平行的直接引用线的类,未考虑斜率无穷大的情况,导致输出错误。
4.小数点未四舍五入
5.符号错误
6.精度问题
总结:
bug来源主要来自以下四点:
1.初学java对java的陌生。
2.对java类自带方法的错误使用。
3.自己对题目了解不够,导致健壮性的不完善。
4.不小心写错。
代码分析
第一次作业
7-7
类图:
耦合度:
第一次作业比较简单,没有什么特别的难点,只要学习一下java的基本语法用法就可以完成。主要是帮助我们初入java的更好的了解java。
第二次作业
7-2
类图:
耦合度:
第二次作业相比第一次难度稍微上升了一些,相比第一次作业的计算,这次作业突出对字符串的使用的训练。该题使用字符串后使用substring将字符串的不同位置的字符分开来进行判断。在格式判断上则采用正则表达式来确保格式的正确性,并且大大减少了判断需要的代码量。
第三次作业
7-1
类图:
耦合度:
这道题同样使用正则表达式来保证格式正确。再采用split将其拆分装入不同的数组当中,之后使用valueof得到值进行后续的运算。
这道题主要还是为后两道题做铺垫。
7-2
类图:
耦合度:
本题代码量大量上升,包含精度等等一系列的问题。对点的类和线的类写好了,对后续的写代码有很大帮助。
在类中写好会用到的基本方法后,在主函数中进行封装,使用switch进行选择。
点类中,写好斜率,两点距离。
线类中,写出点到线的距离,两线是否平行……等等
类创建的好坏极大程度上决定了你代码的完整性与理解性。
7-3
类图:
耦合度:
本题看做7-2的升级版本,在延续7-2中的点和线的类的基础上,在新建一个三角形的类
三角形类中,有着判断三角形类型,求三角形的周长及面积,线切割三角形,点是否在三角形内的方法。
线切割三角形求两三角形的面积中,在不考虑与边重合等特殊情况的时候分两种情况讨论,一种是重三角形顶点切入,分为两个三角形,另一种是分成一个三角形和一个四边形。对面积的计算采用计算一个三角形的面积后,用大三角形本体减去小三角形得到另一个需要求的三角形或四边形的面积。
点是否在三角形内,题目要求使用射线法,但我偷懒用了别的方法,我使用的是将点与三角形的三个顶点连接起来,求出三个形成的三个三角形的面积,通过面积的相加是否等于三角形重而判断点是否在三角形的内部。其中如果有一个三角形的面积为0则表示点在线上,对特殊情况进行分析即可,注意所求面积的精度问题。
总结与感想:
对前三次的作业来说,在面向对象过程的写法方面还有很大的提升空间。在第三次作业中,如果能更好的设计类,应该可以减少很多不必要浪费的时间和提高自己的正确率。在前三次中也有很多的收获,了解了很多java的语言,写法及自身类库所带的方法。对类与对象有了更进一步的了解,学习到了思维方式以及分析题目的做题技巧。
关于java的学习,我还差的很多,还要多进行学习,在菜鸟教程,MOOC等学习平台上多进行学习。
关于实验,我觉的可以很好的训练我们的学习的成果。
最后,希望可以继续进步,大家一起加油吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~