OO第一单元自白
Homework 1 简单多项式导函数
对于初次接触的OO,第一次作业已经可以体会到其与面向过程的C语言之间的差别。
我的想法是,建立了Multinomial和Monomial 两个类,分别能够实现多项式和单项式。
对于多项式类,只提供默认的无参数构造方法。对单项式类,提供参数为系数和指数的构造方法。
个人认为,多项式的append方法是我的设计中较好的一个方法,通过将单项式append进入,将组合为一个多项式。并且,在append方法中,还拥有合并同类项的作用。
对于求导,在单项式和多项式都拥有求导方法。单项式求导返回单项式,多项式求导调用单项式的求导方法,将单项式求导结果使用append添加进一个多项式即可。
也就是说,在main方法利用正则进行了各个单项式的提取,随后只需将各个单项式简单的append,再调用多项式求导方法即可得出结果。
第一次作业bug分析
在互测中,我被hack10次,主要原因在于我对输入合法性的判断上。
对于指数情况的整数与符号分离问题,对于指数出现两个符号的情况,等等问题,我在第二次作业前进行了深刻的反思,尽可能避免再次发生同样的错误。
寻找别人的bug
阅读过别人的代码,发现自己一无所获(主要是自己太菜,有很多的格式错误,导致自己也无法找到别人的格式错误)
进行了\\v\\f的攻击,以及爆栈的攻击
Homework 2 包含简单幂函数和简单正余弦函数的导函数
第二次作业大体延续第一次的append想法,其中有两三个主要的改动:
1.第一次作业的单项式仅仅 a * x ^ b形式,求导结果仍为这样的单项式, 但第二次作业形式 a * x ^ b * sin(x) ^ c * cos(x) ^ d,求导后由三个单项组合形成一个多项式,因此,我重载了一个参数为多项式的append方法,扩充多项式的append的参数形式既可以为单项,也可以为多项 。
2.第一次作业中我对单项式和多项式都实现了print方法,其中多项式调用单项式的print方法。但这种方法虽然能够完成第一题的要求,但较为局限。在第一次作业互测中,我发现有的同学写了toString方法,当时就觉得不错,因此第二次作业将print更改为toString,实现了输出。
3.针对第一次互测中出现的字符串格式判断进行反思,大概采取了 先判断空格相关错误->删除空格->判断多符号相关错误->化多符号为单符号 的策略
最后进行正则进行匹配于捕获。
第二次作业bug
在强测和互测中,暂未发现bug(可能还有未发现的bug)
第二次作业寻找bug
在阅读别人的代码时,我主要关注了正则的书写,并发现了一些忘记在特定地方判断空格的情况。
以及末尾出现了一个符号等等错误的情况。
Homework 3 包含简单幂函数和简单正余弦函数的导函数
第三次的作业较为复杂,我在周六进行了一上午的思考,初步想法是使用正则,将其分为因子,分别对应到五种因子类,并且这五类继承自因子总类Factor(可以定义为抽象类)。但是,最让我崩溃的事情出现了,正则无法成对的匹配括号,于是我整个人都不好了。进度停滞。
在周日下午,有同学分享了他的作法,采用状态机的方式进行括号的分析,我深以为然,在周日晚上再次投入战斗。
具体实现方式依旧类似,不同的是,单项式里存放了因子的一个arraylist,对每种因子类,都提供了求导的方法。
我出现的bug:
在我的三角函数因子类中,我忘记匹配了指数的正负号而导致出现了错误,致使三角函数的指数出现符号无法匹配。
所幸强测中并没有。。。
怎么找别人的bug?
在没法WF的情况下用空格和TAB来找bug成为了王道。
在各种各样的可以添加的地方随意添加了几个空格和\t就发现了三个同学的bug
Applying Creational Pattern
关于第三次作业当中出现的一些问题与改进。
首先,我的判断括号的状态机直接写入了多项式类的构造方法中,导致构造方法过长,理应单独分出一个类对此进行分析操作,再将得到的结果进行对象的构造。
其次,就是我的append方法并没有进行同类项的合并,一方面是因为情况众多,比较复杂,另一方面也是时间有限,优化分数占比不高。
最后,关于各种因子类的求导问题。在我的设计中, 因子共五类,常数类,x^\d 类,sin类(sin里面可以是任意的,只要最外层是sin即可,例如sin(x),sin((x+x))等),cos类,表达式类。
常数求导还是常数类,x^\d,sin,cos求导结果为单项式类,而表达式因子类的求导结果为表达式因子类。
问题便是求导方法的返回值,对于抽象类factor,其提供的方法返回值究竟应该设定为什么?为了使得求导结果的返回值常数类或单项式类都能匹配factor类的求导方法,我竟然设定factor求导方法返回值为object类型(这样常数类和单项式类都是object子类,编译才能通过)。
其实只需要将常数类和表达式因子的返回值设定为单项式类就可以解决了。。。
如果你看到了这里,那就很感谢你啦~
OO第一单元自白的更多相关文章
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- 【OO学习】OO第一单元作业总结
OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- OO第一单元(前四周)作业总结
OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...
- 北航OO第一单元作业总结(1.1~1.3)
经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...
- OO第一单元总结与反思
OO第一单元总结与反思 目录 OO第一单元总结与反思 摘要 第一次作业 本次作业UML类图 本次作业度量分析 第二次作业 本次作业的UML类图 本次作业的度量分析 第三次作业 本次作业的UML类图: ...
随机推荐
- NodeJs命令
cd命令,就是change directory的缩写,表示更改当前目录 cls命令,清屏.清屏幕命令(CLS,CLear Screen) tab键,自动补全. 上键,提示最近的命令 在cmd窗口 ...
- CentOS开机报错:sd 0:0:0:0: [sda] Assuming drive cache: write through
解决方法: vim /etc/default/grub 文件里去掉 rhgb 参数. [root@lb-nginx- ~/]#vim /etc/default/grub GRUB_TIMEOUT= G ...
- ubuntu输入法
一直都是使用搜狗的,但是感觉一直都不兼容.经常输入一串文字导致输入法崩溃 比如 ‘外显’waixian就崩了. 而且会出现fcitx 100%cpu占用的情况 pkill fcitx &&am ...
- windows 命令行出现中文乱码
1.打开CMD.exe命令行窗口 2.通过 chcp命令改变代码页chcp 65001 //UTF-8的代码页为65001
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- leetcode3:无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定 &q ...
- 设计模式学习心得<单利模式 Singleton>
概述 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要解决 一个全局使用的类频繁地创建与销毁. 何时使用 当您想控制实例数目,节省系统资源的时候. 如何解决 判断系统是否已经有这个单 ...
- django by example 第四章 扩展 User 模型( model)
描述: RelatedObjectDoesNotExist at /account/edit/ User has no profile. 原因: 注意原书,要求新建一个账户才能使用.
- WPF图片拖拉变形、合成
使用WPF的装饰器(Adorner)实现图片拖拉变形,DrawingVisual高保真合成图片.效果如下: 源码:https://gitee.com/orchis/ImageFotoMix.git
- 在Linux服务器上配置Transmission来离线下载BT种子
Transmission简介 Transmission是一种BitTorrent客户端,特点是跨平台的后端和简洁的用户界面,硬件资源消耗极少,支持包括Linux.BSD.Solaris.Mac OS ...