第一次作业因子仅包含常数(带符号及前导0),幂函数(指数非负,包含省略形式)和表达式因子;项由乘号连接的若干因子组成(第一个因子前可带一个符号);表达式由加号或减号连接的若干项组成(第一项前可带一个符号)。同时声明了如空白字符等输入表达式的形式限制及如指数范围等数据限制。
类的属性个数、方法个数、类总代码规模
类名 | 属性 | 方法个数 |
---|---|---|
MainClass | 0 | 6 |
Poly | 1 | 9 |
Term | 3 | 10 |
方法复杂度
类图
classDiagram class MainClass MainClass: +main(String[] args)void MainClass: +getSymbol(String str)String MainClass: +getCoef(String str)BigInteger MainClass: +getindex(String str)BigInteger MainClass: +getTerm(String str)Term MainClass: +getPoly(String str, ArrayList<Term> tempTerms, ArrayList<Poly> polys)Poly class Poly Poly: -ArrayList<Term> terms Poly: +Poly(ArrayList<Term> terms) Poly: +addPoly(Poly poly1, Poly poly2)Poly Poly: +subPoly(Poly poly1, Poly poly2)Poly Poly: +mulPoly(Poly poly1, Poly poly2)Poly Poly: +powPoly(Poly poly1, Poly poly2)Poly Poly: +posPoly(Poly poly1)Poly Poly: +negPoly(Poly poly1)Poly Poly: +mergeTerm(Poly lastPoly)Poly class Term Term: -String symbol Term: -BigInteger coef Term: -BigInteger index Term: Term(BigInteger index, BigInteger coef, String symbol) Term: mulTerm(Term term1, Term term2)Term Term: print(Term term)void Term: printFirst(Term term)void Term: compareTo(Term other)int第二次作业在因子中增添了三角函数因子,自定义函数及求和函数。
类的属性个数、方法个数、类总代码规模
类名 | 属性 | 方法个数 |
---|---|---|
MainClass | 0 | 16 |
Poly | 1 | 2 |
Term | 5 | 14 |
TriFactor | 4 | 7 |
AddPoly | 2 | 4 |
SubPoly | 2 | 4 |
MulPoly | 2 | 3 |
Output | 1 | 8 |
方法复杂度(截取复杂度较高的方法)
类图
classDiagram class MainClass MainClass: +main(String[] args)void MainClass: +getSymbol(String str)String MainClass: +getCoef(String str)BigInteger MainClass: +getindex(String str)BigInteger MainClass: +getTerm(String str)Term MainClass: +getPoly(String str, ArrayList<Term> tempTerms, ArrayList<Poly> polys)Poly MainClass: +getTriFactor(String str, ArrayList<Poly> polys)TriFactor MainClass: +printFirst(Poly ansPoly, Output output)void MainClass: +addOp(ArrayList<Poly> polys, String[] details)void MainClass: +posOp(ArrayList<Poly> polys, String[] details)void MainClass: +sinOp(ArrayList<Poly> polys, String[] details)void Output <.. MainClass Poly <.. MainClass class Poly Poly: -ArrayList<Term> terms Poly: +getFirstTerm()Term class Term Term: -String symbolTerm Term: -BigInteger coefTerm Term: -BigInteger indexTerm Term: -ArrayList<TriFactor> sinArray Term: -ArrayList<TriFactor> cosArray Term: +mulTerm(Term term1, Term term2)Term Term: +addSin(ArrayList<TriFactor> termSinArray, ArrayList<TriFactor> sinArray) Term: +compareTo(Term other)int class Output Output: -Poly poly Output: +mergePoly(Poly poly)Poly Output: +merge(ArrayList<Term> sorted, int i)void Output: +returnPoly(ArrayList<Term> sorted)Poly Output: +printFirstTerm(Term term)void Output: +print(Term term)void Output: +printSin(Term term, int flag)void Term <.. Output class AddPoly AddPoly: +add(Poly poly1, Poly poly2)Poly AddPoly: +pos(Poly poly1)Poly Poly <.. AddPoly class SubPoly SubPoly: +sub(Poly poly1, Poly poly2)Poly SubPoly: +neg(Poly poly1)Poly Poly <.. SubPoly class MulPoly MulPoly: +mul(Poly poly1, Poly poly2)Poly MulPoly: +pow(Poly poly1, Poly poly2)Poly Poly <.. MulPoly class TriFactor TriFactor: -BigInteger indexTri TriFactor: -BigInteger coefTri TriFactor: -String symbolTri TriFactor: -BigInteger isIndex TriFactor: +compareTo(TriFactor other)int第三次作业增添了表达式中嵌套的定义,包括三角函数括号内的因子嵌套及自定义函数定义中的括号嵌套及自定义函数调用中的对表达式银子、求和函数和自定义函数本身的调用。
类的属性个数、方法个数、类总代码规模
类名 | 属性 | 方法个数 |
---|---|---|
MainClass | 0 | 17 |
Poly | 1 | 4 |
Term | 5 | 16 |
TriFactor | 2 | 5 |
AddPoly | 2 | 4 |
SubPoly | 2 | 4 |
MulPoly | 2 | 3 |
Output | 1 | 8 |
方法复杂度(截取复杂度较高的方法)
类图
classDiagram class MainClass MainClass: +main(String[] args)void MainClass: +getSymbol(String str)String MainClass: +getCoef(String str)BigInteger MainClass: +getindex(String str)BigInteger MainClass: +getTerm(String str)Term MainClass: +getPoly(String str, ArrayList<Term> tempTerms, ArrayList<Poly> polys)Poly MainClass: +getTriFactor(String str, ArrayList<Poly> polys)TriFactor MainClass: +printFirst(Poly ansPoly)void MainClass: +addOp(ArrayList<Poly> polys, String[] details)void MainClass: +posOp(ArrayList<Poly> polys, String[] details)void MainClass: +sinOp(ArrayList<Poly> polys, String[] details)void Poly <.. MainClass class Poly Poly: -ArrayList<Term> terms Poly: +polyEquals(Poly poly1, Poly poly2)boolean class Term Term: -String symbolTerm Term: -BigInteger coefTerm Term: -BigInteger indexTerm Term: -ArrayList<TriFactor> sinArray Term: -ArrayList<TriFactor> cosArray Term: +mulTerm(Term term1, Term term2)Term Term: +addSin(ArrayList<TriFactor> termSinArray, ArrayList<TriFactor> sinArray) Term: +compareTo(Term other)int Term: +comparePoly(Poly poly1, Poly poly2)int class Output Output: -Poly poly Output: +mergePoly(Poly poly)Poly Output: +merge(ArrayList<Term> sorted, int i)void Output: +returnPoly(ArrayList<Term> sorted)Poly Output: +printFirstTerm(Term term)void Output: +print(Term term)void Output: +printSin(Term term, int flag)void Term <.. Output class AddPoly AddPoly: +add(Poly poly1, Poly poly2)Poly AddPoly: +pos(Poly poly1)Poly Poly <.. AddPoly class SubPoly SubPoly: +sub(Poly poly1, Poly poly2)Poly SubPoly: +neg(Poly poly1)Poly Poly <.. SubPoly class MulPoly MulPoly: +mul(Poly poly1, Poly poly2)Poly MulPoly: +pow(Poly poly1, Poly poly2)Poly Poly <.. MulPoly class TriFactor TriFactor: -Poly triFactorPoly TriFactor: -BigInteger isIndex TriFactor: +compareTo(TriFactor other)int本次作业公测错的一塌糊涂,关键问题是在第三次作业修改三角函数嵌套输出的时候因为粗心没有把上一次作业的输出完全复制,导致在某项有sin输出时再输出第一个cos前没有*;问题所在类和方法是Output类中的printCos()方法,出现问题的方法比在模块设计复杂度及圈复杂度上明显高于未出现问题的方法。
本次作业在互测中被check出4个bug,都是同质错误,在三角函数输出时未考虑到括号内部符号为-
且只存在一个不为常数的单因子的情况,此时括号内并非因子,故应输出多层括号而非一层;问题所在的类和方法是Term类中的isFactor(),出现问题的方法比在模块设计复杂度及圈复杂度上明显高于未出现问题的方法。