前三次题目集总结
一,作业分析
第一次作业是我们第一次接触java写java代码,所以作业难度不大,主要是让我们熟悉一些java的基本操作,第二次作业主要是用到字符串相关知识,我认为字符串在所有编程语言里都是挺重要的,了解了java的字符串使用可以为 后续的一些题目打下基础,第三次作业开始我第一次接触面向对象的思想,在老师讲完大概的写法之后,当我自己去写代码的时候我发现我写起来有点困难感觉自己写的很困难,我艰难的写完第三次作业的前两个题,写第三个题目的时候绷不住了,然后我冷静下来检查了自己写的代码发现,自己没有完全掌握面向对象的精髓,然后我理好思路下定决心重新开始构造类,重新写了一份代码,结果第三题也没我想象的那么难写,而且代码量大大缩减只写到了220行左右。之前的第二题就写到了250多行。由此可见面向对象是真的香!下面是我对这三次作业的简要分析。
1.精度问题(第一次作业)
第二次作业的第七个题-巴比伦求平方根近似值中有个float类型的精度问题,本题要求:nextGuess和lastGuess的差值小于0.00001时认为两者几乎相同,此题判断相等并不是直接的等于而是两者的差值小于0.00001才认为两者几乎相同。这个题目其实为第三次作业的一系列测试点提供了暗示,第三次作业有些测试点一直过不了就是因为没有考虑到所用类型的精度问题,当把精度问题一考虑立马“全部正确”。其他的题目只要有点编程基础都不难。这次作业都是面向过程的。
2.字符串的一些基本用法(第二次作业)
第一题是将所有英文字母转换成它们在字母表中的序号,例如:“AbbcD”转换为“12234”。翻阅课本字符串那一章我找到了charAt()方法,这个方法可以定位当前的字符,当字符属于a-z或者A-Z之间查阅ASCII码减去对应的数字将字符转化为数字。第二题依然是用的charAt()方法,题目是RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。对于单个字符的操作charAt()方法是真的好用。只要算法得当这种小题目很容易解决。但是当需要操作字符串的话只会这个显然不够,在第三题学校学生学号格式定义如下:2位年级号+2位学院号+2位班级号+2位序号,如19041103,编写程序处理用全院学生学号连接起来的长字符串,学院编号为20,包括17、18、19、20四个年级,请从字符中提取特定两个班级202017班、202061班同学的学号后四位输出,输出编号之间用空格分隔,不换行。注意:需要排除非法输入。我用到了substring()函数,该函数有两种形态,如果只传一个参数i时截取的是字符串索引为i位置后面的所有字符(包括索引为i的字符)。如果传递的参数为两个的话,列如s.substring(0,i),这截取的字符子串是从索引位置从0开始到索引位置为i-1号位置的字符。这个方法还是挺好用的,我在第三次作业也经常用到这个操作。第二次作业就学到了这么多,难度也不大,因为代码量不大所以全是用面向过程写的。
3.面向对象,点,线,三角形(第三次作业)
第一次类的结构如下:
第二次构造类的结构如下(有些方法是用于第四次作业的):
第一次的代码写的是真的烂,虽然我也创建了Dot对象,Line对象,triangle对象,然而我里面放的全是一些方法而且有些方法不具备普适性,也没用到类里最强的构造方法,我把分割的点用了一个arr[ ]数组存起来,由于没用到对象我的一个点要占用两个数组空间分别存取一个点的x坐标y坐标,当有4个点时我的数组中含有8个元素,写到第三题索引值有8个眼睛都看花了,写起来非常吃力而且错误很难发现。当我的第二遍代码用到对象去写,我只需要通过类的构造方法去创建我所需的点就能得到我需要的那个点,而不用像第一次那样得到一个点需要记得它的索引值,甚至是遍历才能得到不仅提高了时间复杂度而且让代码很难让人去读。反而是对象别人一眼就知道我用的是哪一个点,哪一条线进行哪一种操作,代码的可读性大大提高。第一次的代码写了类但是没有创建任何一个成员变量,这也是第一遍的代码如此复杂的原因,比如我要得到两点之间的距离也就是一条线的长度,我只能去调用Dot类的两点之间的距离方法去完成,这也使得代码可读性变得很差。改进之后我在Dot类里面添加了一个点的x坐标和y坐标成员变量,在Line类成员变量中我加了斜率,长度以及构成线的两个端点Dot endPoint1 = new Dot();Dot endPoint2 = new Dot();triangle类中我放了三角形的面积,周长,以及三角形的三条边使用对象数组Line[ ] side = new Line[3];存三边的信息,通过一次课堂实验我学到了对象数组使用前需要对所有对象实例化,要不然会出现空指针异常的错误。刚好我使用的过程中也碰到这个问题,之后很快解决了。
UML类图
二, 问题以及改进
第一个问题是一开始我将各个选项所需要的方法放在了类里面,结果使得类看上去非常赘余没有那么简洁,之后我把那些方法放到了启动类Main里面,我的Dot类,Line类,triangle类看上去就非常简洁了,没有无关紧要的东西,里面的每一项都是与类相关的属性。第二个问题是我类里面必要的方法没有做静态化处理,这导致我每次调用类的方法时需要创建一个对象浪费了资源空间,之后我把类方法做了静态化static处理,就可以直接通过类名.方法名调用类方法了,非常的方便,明了。
代码分析
Main1全在圈内,符合java代码规范
Main2的复杂度等各项指标明显不如Main1的,原因是因为我的if-else语句嵌套过多导致
Main3和Main2的各项指标几乎一致,这共同的反映出我的代码质量还有待提高,尤其是要减少if-else的语句使用
三,作业总结
前面两次的作业都是面向过程写的,主要是让我们熟悉Java的语法习惯,在写这两次作业学到的知识也用到了第三次作业中,列如:s.substring()方法用来截取输入的字符串,s.split()方法用来分割字符使用float型和double型数据时要考虑精度问题等等。可以说前面的两次作业完全是第三次作业的铺垫,第三次作业是学习java入门中最重要的。面向对象的思想在这体现的淋漓尽致,我自己就是个很好的例子,第一次半面向过程第三次作业的第二小题写完花了250行代码,而第二次的代码量只有短短的122行,代码量足足缩减了50%,而且结构更清晰,也方便了后面的作业,要不然后面的第四次作业判断四边形的根本没法写。
老师的授课方式还是挺好的,就是作业量有点大了,不过确实只有这样我们的编程能力能更好的提高,还有一点就是希望老师能够在pta的作业中多给一些提示,猜测试点的时间可能比我写的时间都多一点......
__EOF__

本文链接:https://www.cnblogs.com/wwk-blogs/p/16742343.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)