309
社区成员
发帖
与我相关
我的任务
分享本部分统计类的属性个数、方法个数、类总代码规模、核心控制分支数目,完整度量如下:
| 类名 | NOA(属性个数) | NOM(方法个数) | CLOC(类总代码行) | 核心控制分支数目 |
|---|---|---|---|---|
| Main | 0 | 1 | 12 | 0 |
| Term | 4 | 9 | 63 | 2 |
| Polynomial | 1 | 23 | 331 | 17 |
| Expr | 10 | 15 | 282 | 26 |
| Solver | 4 | 3 | 105 | 8 |
| 类名 | WMC(加权方法复杂度) | CBO(类间耦合度) | TCC(类内聚度) | CCC(类完整度) |
|---|---|---|---|---|
| Main | 1 | 2 | - | - |
| Term | 11 | 2 | 1.0 | 1.0 |
| Polynomial | 40 | 4 | 0.9 | 0.95 |
| Expr | 38 | 4 | 0.75 | 0.8 |
| Solver | 12 | 5 | 0.8 | 0.9 |
| class | OCavg(平均圈复杂度) | OCmax(最大圈复杂度) | WMC(总加权复杂度) |
|---|---|---|---|
| homework.Main | 1.0 | 1.0 | 1 |
| homework.Term | 1.22 | 3.0 | 11 |
| homework.Solver | 4.0 | 7.0 | 12 |
| homework.Expr | 2.53 | 12.0 | 38 |
| homework.Polynomial | 1.74 | 6.0 | 40 |
| Total | - | - | 102 |
| Average | 2.1 | 5.8 | 20.4 |
| method | CogC(认知复杂度) | ev(G) | iv(G) | v(G) |
|---|---|---|---|---|
| homework.Main.main(String[]) | 0.0 | 1.0 | 1.0 | 1.0 |
| homework.Term.mul(Term) | 0.0 | 1.0 | 1.0 | 1.0 |
| homework.Term.equals(Object) | 2.0 | 1.0 | 2.0 | 3.0 |
| homework.Polynomial.addTerm(...) | 2.0 | 1.0 | 2.0 | 4.0 |
| homework.Polynomial.pow(BigInteger) | 3.0 | 2.0 | 2.0 | 4.0 |
| homework.Polynomial.deriveX() | 2.0 | 1.0 | 2.0 | 3.0 |
| homework.Solver.solve() | 3.0 | 2.0 | 2.0 | 4.0 |
| homework.Expr.addOrSub() | 3.0 | 2.0 | 3.0 | 5.0 |
| homework.Expr.simplify() | 4.0 | 2.0 | 3.0 | 5.0 |
| homework.Expr.xuanze() | 5.0 | 3.0 | 4.0 | 6.0 |

只有 Main Solver Expr Polynomial 四个类 由于只有x项就没有用到term类 直接在Polynomial中用treemap存储
然后就没什么特别的
在Expr里面 根据 加减乘法的优先性 拆成若干个Expr1.getPolynomial()相加减
再把每个Expr1.getPolynomial()(没有加减法的情况下)拆成若干个Expr2.getPolynomial()(而这个也就是因子)
然后因子 即 Expr2.getPolynomial() 无非就是四种情况
于是先判断 Expr^Expr
再判断(Expr)
再判断x还是int
Polynomial 差不多是AI写的
没有用Biginteger
1.新增了 指数函数因子 exp(Expr)
考虑到存储功能 增加了term类 拓展一下加减乘法即可 同时优化了负号后置(关于系数排序了一下)
2.新增了 选择式因子 [(ExprA==ExprB)?ExprC:ExprD]
this.polynomial = ExprA.getPolynomial().sub(ExprB.getPolynomial()).isEmpty() ?
ExprD.getPolynomial() : ExprD.getPolynomial() ;
3.新增了 自定义函数 f(x) = 表达式 (name(x) = Exprf)
这里先是在Solve中添加了存储自定义函数<String,Polynomial>的hashmap(显然在hw中没用到)
然后在Expr中多加了两个形参 funcExprMap (自定义函数表)和 polynomialOfX (当前表达式的自变量)
x的指数没有用Biginteger
1.表达式从单变量 x 扩展为双变量 x, y
这边有点偷懒了 就是在Term里加了一个yexp
其实 或许可以在Term里面弄一个<String,Biginteger>的varIntMap
2.新增了 求导算子 dx, dy 和 grad
就简单在 Polynomial中加了三个求导函数 都是差不多的
虽然似乎可以改成 deriveVar(String var) 但是鉴于只有x和y ,Term也没改hashmap就没多写 (虽然是AI的)
3.新增了 自定义递推函数 f{n}(x)
处理方法和f(x)类似 虽然按道理来说要写Map<String, Map<Integer, Polynomial>> 但是只写了 Map<Integer, Polynomial> recursiveFuncMap
然后再是先在输入最终的表达式之后取出{}中最大的maxn就可以递推处理f{2}到f{maxn}的polynomial
然后Expr再弄个形参把recursiveFuncMap放进去就好
在exp输出过程中 判断指数是否是 因子时 忘记加入 对y的判断
默认了先输入f{0}再输入f{1}
其实基本用ai 但是好像基本没有作用 毕竟ai自己写出来的都会错
就简单做了一个负号的后置 用了系数的排序
一些规模比较小的 功能特定的函数 或者类(Term 或者 hw1的Polynomial) 我是用AI写的
我会用AI辅助找bug和博客作业
大模型不能精确的找到所有 bug (当然非常有可能我不太会用AI)
其实基本上都会有AI成分 我感觉自己写代码 在不需要给别人看的情况下 很少写注释
AI还是太伟大了 但是我好像不是很会用AI 也不知道哪个AI更加擅长编程
AI毕竟是生产力工具 要好好使用 不然会被淘汰? 或许吧
希望能够引导 教导大家怎么使用AI