OO第一次blog
(1)基于度量来分析自己的程序结构
第一次:
Poly:
属性 AL<Term>
方法 check(格式检查) Poly(构造) merge(合并) compute(求导)
Term:
属性 coeff exp
方法 Term(构造) get/set
Poly格式检查,Poly用正则分割出Term,Term解析出coeff和exp。在Poly中根据Term的属性进行合并,并计算,最终在PolyCompute中输出。
1.感觉把输出部分写到Poly的tostring里面更好一些。
2.这次用了一个超大正则一次进行格式判断和解析,不是很好而且有爆栈风险。
3.没有预处理造成后面的解析会复杂一些


第二次:
Poly:
属性 AL<Term>
方法 check Poly merge firstop(符号预处理) derivation
Term:
属性 key(四元组)
方法 replacefirstop(符号预处理) Term derivation print printfactor get/set
Factor:
属性 key
方法 Factor get
Key:
属性 coeff expofx expofcos expofsin
方法 Key(构造) equals_exp mul/add_coeff add_exp derivation
Poly格式检查、预处理(符号变换和添加、空格等),用正则分割为Term,Term用*分割出Factor,Factor解析出四元组Key,Key为一种数据类型(四元组),将factor在Term中合并,在poly中对exp三元组一样的进行合并。
求导时,Poly的AL对每个Term求导,每个Term的求导(运算及返回值皆有Key完成),之后在Poly求和。
create:Poly->Term->Factor
derivate:Poly->Term
print:Poly->Term->Factor
1.Key被我搞成了结合了coeff的四元组使用起来反而不便
2.因为Term最后可以归为一个三元组+coeff,所以我的求导
3.因为print和create还是要下到Factor层面,所以提前把集中Factor的子类创建起来之后继承Factor(或者接口,可以具体情况再分析)更好一些。


第三次:
Poly:
属性 AL<Term>
方法:新增tostring的重写
Term:
属性 AL<Element>自身
方法 新增merge create_element tostring
interface Element:
方法 derivation tostring
interface Triangle:
方法 getExp create_element
其余的大多都是一些数据特征上的问题,就没什么好列举的了
poly用正则分出Term,Term再用正则分出Element,在Term中构造element,其中cos/sin需要保存其exp的基础上对其内部嵌套的!!因子!!再次构造,递归终点为Cons和Xpower。
求导:P对T的导求和,T对E的导进行while运算,E的导在三角函数的情况下为三角的导和嵌套因子的导的乘积,在poly(表达式/表达式因子)的情况下递归,最终得到一个表达式作为表达式因子返回。
输出类似,也是从P到T到E的结构
1.数据结构不太好,构造向下传的时候是P/T/E,求导回传的时候就是AL嵌套AL了。应该构造(简单传值)和parser分开,数据结构就对齐了。我在hw3中用的数据结构效率相当低下。(AL<AL<Ele...>>Term的导数,而不是Poly,对于Ele同理)
2.一开始看错题了以为三角函数里面嵌套的是表达式,但实际上是表达式因子,补救的时候不想大动代码结构,因此在处理create_element的时候出现了相同代码重复出现的情况
3.脑抽没想起来怎么判断运算符是不是分割T/E的,也不想改成嵌套状态机或者状态机配合正则,就写了个超长正则用来处理括号匹配,于是造成了TLE
4.triangle其实不应该是接口,而应该是抽象类,因为还是有很多的共性的东西的,用抽象类更方便。
5.sin/cos的优化忘了搞了,导致嵌套0和表达式因子的时候输出非常糟糕的长



总结:
1.构造应该简化,解析放在parser里
2.不应该用大正则
(2)分析自己程序的bug
第一次:
互测被抓到一个bug:
正则的一个地方少加了一个[ \\t]*
第三次:
强测TLE:
用正则匹配括号造成的
都发生在正则上,第一次没有预处理,预处理之后问题将简化很多就不会出现这个问题。第三次不适合用正则,但我不想改造成的强行用正则而TLE。
(3)发现别人bug
1.构造边界条件,对于潜在bug进行点分类,每类分情况,之后全排列。
2.按照标准随机生成表达式,用大量测试点,覆盖大部分格式。
3.对于表达式基本结构如符号、空格、数字、字母进行随机全排列(不过效率极低)
OO第一次blog的更多相关文章
- OO第一次作业总结
OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- JAVA第一次blog总结
JAVA第一次blog总结 0.前言 大一下学期我们开展了OPP这门课程,这也是我们第一次接触到JAVA.与上学期我们在学校里学C语言不同的是,这学期由于疫情原因我们是以网课的方式在学习.在学习中我发 ...
- OO第一次阶段性总结
经过三次作业的历练之后终于来到了写博客这一周.回顾开学来的这一个月,令我印象最深刻也是最累的一门课就是OO了.虽然上学期学过一部分Java,但这学期开学就来的OO作业还是让我在第二周就开始熬夜了.不过 ...
- OO第一次单元总结
第一次总结性博客 16071070 陈泽寅 2019.3.23 一.第一单元所学总结 首先先来总结一下第一单元我所学到的知识以及所感所悟.第一个单元,是我第一次接触JAVA语言,并且再使用了几次之后, ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- OO第一次博客
过去的三周里我们完成了表达式求导的程序设计与构造.表达式求导程序,大致思路是实现一个表达式类,支持表达式的输入.求导运算和输出功能.可能的话,还可以增加表达式的化简方法,从而得到更高质量的输出结果.总 ...
- oo第一次作业
前言: 这是一篇面向对象作业总结,作业内容是对多项式进行求导,一共有三个阶段,具体要求不详述,第一阶段只要求’+’连接coeff*x^pow的形式,第二次支持*连接的幂函数及三角函数,第三次则需要支持 ...
随机推荐
- Ubuntu下把缺省的dash shell修改为bash shell
Ubuntu下缺省使用的是shell是dash,而不是bash.从/bin/sh软连接的指向可以看出这点. dash shell 虽然比bash shell更轻便,但是它并不支持所有的语法,运行she ...
- mysql免解压版安装教程步骤
首先我这里演示的是mysql-5.6.27-winx64这个免解压的版本 添加环境变量(如添加了则跳过该步骤) 操作如下: )右键单击我的电脑->属性->高级系统设置(高级)->环境 ...
- Vue Input输入框两侧加减框内数字组件
NumberBox组件内容: <template> <div class="number-box" :class="{'box-disable': is ...
- java中几种常用的设计模式
参考https://blog.csdn.net/jiyang_1/article/details/50110931 参考https://blog.csdn.net/dean_hu/article/de ...
- js通过formData上传文件,Spring后台处理
1.前端 var formData = new FormData(); formData.append('file', $("#file").val()); $.ajax({ ur ...
- 小程序2-基本架构讲解(一)WXSS样式
项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 WXSS 样 ...
- C#异步方法
Task MainTask; MainTask = Task.Factory.StartNew(() => { //耗时的异步逻辑 });
- 执行Runtime.exec()需要注意的陷阱
作为Java语言的一部分.java.lang包被隐藏的导入到每一个Java程序.这个包的表面陷阱,经常影响到大多数程序员.这个月,我将讨论运行时exec()方法时的潜伏陷阱. 陷阱4:当运行exec( ...
- frist Django app — 五、Test
Test——很重要但是没有被重视起来的一个环节,至少是我自己,其实自己之前在做java web的时候就去尝试过怎么做REST接口的测试,一直没有找到一种合适方式,而且因为时间紧没有进一步深究,但是造成 ...
- java高并发实战(一)——为什么需要并发
转自:https://blog.csdn.net/gududedabai/article/details/80813592