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第一单元自白的更多相关文章

  1. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  2. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  3. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  4. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  5. OO第一单元(求导)单元总结

    OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...

  6. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  7. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

  8. 北航OO第一单元作业总结(1.1~1.3)

    经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...

  9. OO第一单元总结与反思

    OO第一单元总结与反思 目录 OO第一单元总结与反思 摘要 第一次作业 本次作业UML类图 本次作业度量分析 第二次作业 本次作业的UML类图 本次作业的度量分析 第三次作业 本次作业的UML类图: ...

随机推荐

  1. 550 5.7.1 Client does not have permissions to send as this sender

    收发邮件时出现以上这种情况,系统提示550 5.7.1 Client does not have permissions to send as this sender,这是什么原因赞成的呢? 活动目录 ...

  2. week07 13.2 NewsPipeline之 二 News Fetcher - Xpath

    我们使用Xpath来专门做一个scrapter 我们专门弄个文件夹 里面全部是 各个新闻源(CNN BBC等)的scraper来抓取网站的text内容 主要函数(就是传入text内容的那个url)然后 ...

  3. 《Spring_Four》第二次作业 基于Jsoup的大学生考试信息展示系统开题报告

    一.项目概述 该项目拟采用Jsoup对大学生三大考试(考研.考公务员.考教师资格证)进行消息搜集,研发完成一款轻量级的信息展示APP,本项目主要的创新点在于可以搜集大量的考试信息,对其进行一个展示,而 ...

  4. P45 实践作业

    1. 影评: 观众数量多少,决定被虐者死亡速度的快慢.这一新奇但是残忍的想法,无疑是<网络杀机>的点睛之笔.公众.媒体对凶手网站主造成的伤害,比起那些用恶毒言论还要让人难受千百倍.他是一个 ...

  5. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  6. 使用generatorConfig配置,自动生成实体类,Mapper接口等

    1.在项目的resource目录下面配置generatorConfig.properties文件,以及generatorConfig.xml文件 generatorConfig.properties文 ...

  7. SpringCloud-day02-服务消费者项目建立

    4.4microservice-ticket-consumer-80服务消费者项目建立 我们新建一个服务器提供者module子模块,类似前面建的common公共模块,名称是 microservice- ...

  8. Spring MVC 自动为对象注入枚举类型

    原文地址:http://1358440610-qq-com.iteye.com/blog/2079048 如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一 ...

  9. springboot自带定时任务和集成quartz

    1,springboot自带的定时任务  默认是单线程 有这个依赖就可以 <dependency> <groupId>org.springframework.boot</ ...

  10. vue.$nextTick 解决了哪些问题

    转载:https://www.cnblogs.com/xuewuhen/p/7860989.html $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $next ...