Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的?

A:红的,强测全WA了,能不红么。

菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧。

程序结构简析

三次实验的核心结构都是差不多

第一次的没什么好分析的,每个Item可以用固定的方式表示:num * x ^ n(暂且不考虑格式),然后拼成表达式就行了。

第二次,以Item为最小单位显然是不现实了,每个Item的项数和项的种类都不确定,那么就用抽象类Factor作为基本单位,常数因子、幂函数因子、sin函数因子和cos函数因子作为该类的具体实现。

每个Item用Arraylist<Factor>实现(不会用Hashmap),每个表达式Expression又用Arraylist<Item>实现。

继承关系很容易看出,由Expression为父类,子类Item,然后是抽象类Factor和实现Factor的四个子类。

所有的类都实现一个求导接口,从最底层的四个Factor实现类写起,Item的求导采用乘法求导公式循环求导,Expression求导采用加法求导公式逐个求导。

简化的方法,就是将每个项变为常数因子*幂因子*sin因子*cos因子的标准形式在进行类似第一次作业的简化。

虽然第二次的重构非常痛苦,但是好处是第三次求导可以特别快速地进行:只须添加一个继承Factor类的表达式因子,修改一下sin函数因子和cos函数因子,就可以实现第三次作业的基本功能了。

由于第三次作业简化要求太复杂就不做简化了。

这里只放出最后一次作业的度量结果,从结果上看,还有很大的优化空间,主要是表达式处理上有很粗糙的地方,表达式读入的方式仍旧过于面向过程,写了冗长的函数体。

分析自己程序的BUG


BUG的原因真没什么好分析的,前两次都是在简化的时候发生了对输出的错误处理。但是,两次采用的简化方法并不相同,所以导致BUG的原因也不完全相同。

第一次的简化策略是,逐项输出,以项为最小单位进行简化。在简化中,要考虑常数、幂指数为0、1、-1等的情况。输出表达式时,用+或-进行连接。错误的原因是在常数为0时多输出了一个+号,项却已经被简化没了。

第二次的简化策略仍是以项为最小单位进行简化,但由于此时的最小单位为因子,所以简化起来和第一次相差很大。这次是根据未简化时产生的字符串按正则表达式简化,但由于情况考虑疏忽,导致简化了不该简化的情况,强测出现大量BUG。这就是一个教训:在第一次作业的BUG修复之后,在容易导致BUG的薄弱环节上就不该另起炉灶了

除此之外第二次还有一个地方在拷贝代码时少改了一个变量名,导致求导求错。

第三次的话,就是注意一下评测机系统的System.exit返回值必须为0,不然就会RUNTIME_ERROR就是了。其实在中测的时候就已经发现了这个问题,但是还有一个System.exit(-1)没有改掉,说白了还是自己不细心。

分析自己发现别人程序bug所采用的策略

头两次因为Bug都分在了C组,用黑盒盲测的方法就能发现许多BUG(而且都是一些各种各样无厘头的WRONG FORMAT类问题,技术含量真心低),第三次也无心投入太多时间用来找BUG,所以没什么可谈的。

值得一提的是,有时采用代码评审的方式,能够从代码中直接找出BUG的存在,这个方法在以后处理多线程程序时会起到很重要的作用。

Applying Creational Pattern

如果没错的话应该是用了一个叫什么工厂模式的东西,虽然并不是有意识地在用,写的时候也并不知道这个东西。不过设计模式这个东西真的挺有用的,建议课上多讲一些。

OO第一次博客作业(第一单元总结)的更多相关文章

  1. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  2. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  3. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  4. OO第一次博客作业总结反思

    使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...

  5. [BUAA OO]第一次博客作业

    第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...

  6. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  7. Java第一次博客作业

    第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...

  8. OO第二次博客作业--第二单元总结

    第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...

  9. OO第一次博客总结

    虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...

随机推荐

  1. C++之 自定义数据类型 枚举、结构体、共用体

    1.枚举 枚举类型的声明形式为:   enum  枚举类型名   {  变量值列表 };    变量值列表里都是整型变量,另外不要忘记最后面的分号! 比如,enum  weekday   { sun, ...

  2. Android中的几个基本常用控件

    Android 中常用的几大UI控件 1. TextView : 用于在界面中显示一段文本信息 <TextView android:id="@+id/text_view" / ...

  3. HTML table表格转换为Markdown table表格[转]

    举个栗子,当我想要把这个页面的第一个表格转换成Markdown Table时,怎么做更快,效率更高? 只需简单三步,请看示例: 第一步:复制包含HTML table标签的代码 复制table代码(HT ...

  4. vue-cli title 里面怎动态显示文字

    在路由里每个都添加一个meta[{ path:'/login', meta: { title: '登录页面' }, component:'login' }]   main.js里面加如下代码:     ...

  5. 使用Babel将单独的js文件 中的 ES6转码为ES5

      如果你并没有接触过ES6,当你看到下面的代码时,肯定是有点懵逼的(这是什么鬼?心中一万头神兽奔腾而过),但是你没看错,这就是ES6.不管你看不看它,它都在这里. 1 2 3 4 5 6 7 8 9 ...

  6. Vue语法学习第四课(2)——class与style的绑定

    之前学到的指令 v-bind 在用于绑定class和style时,表达式结果可以是字符串.数组.对象. 一.绑定HTMLClass ① 对象语法 <div class="static& ...

  7. 芯片烧录器编程AT24C02

    网上买了两款芯片烧录器,因为项目用的到.芯片以后的类型可能是IIC 接口的.就选则了一个IIC接口的AT24C02EEPROM.进行尝试.手头上没有这款芯片. 就想起自己单片机上有这款芯片.然后就开始 ...

  8. yum安装的Nginx添加第三方模块支持tcp

    需求:生产有个接口是通过socket通信.nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信. 实现方法:Centos7.2下yum直接安装的nginx, ...

  9. vue created中初始化属性

    created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图. mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作

  10. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...