面向对象第一单元博客

面向对象第一单元博客

这次作业由于各种原因只完成第三次作业,在此对第三次作业的一些设计进行分享

类设计

Main

实现程序的顶层逻辑,包括输入,输出处理

Function

表示一个自定义函数

成员变量

  • char name 函数的名字即(f、g、h)
  • String expr 以字符串的形式保存了函数的表达式
  • ArrayList \ funVar 保存了函数自变量的顺序

方法

  • parseFunction(String poly) 将函数表达式解析为一个Function对象进行保存

InputPoly

具有的功能:将标准输入中的字符串转化为Poly类对象poly,并实现简化,输出的功能

成员变量

  • Poly poly
  • PolyParser parser

方法

  • InputPoly(String str):将输入的str解析为Poly类对象并赋值给poly
  • void simplify():将poly进行合并同类项等优化操作,得到的结果赋值给poly
  • public Poly parse(String str)对str进行解析,得到一个Poly对象

parse

功能:对输入串进行预处理与格式检查,然后调用parser生成Poly类对象

PolyParser

功能:使用递归下降方式解析多项式
具体实现:根据形式化定义从左到右扫描出现的符号,遇到可展开的符号就调用相应的函数解析该符号,解析完成就返回并继续向下解析。

对自定义函数解析方式

我对自定义函数处理的方式如下:
*

Poly

具有的功能:表示一个表达式,管理其下所有的项,

成员变量

  • Arraylist\ termList
  • Boolean simplifyFlag:表示该多项式是否被简化过,初值为false
  • BigInteger exp:表示该多项式的指数

方法

  • Poly simplify():将Poly进行简化并生成新的Poly类对象
  • void mergePoly(Poly poly):合并一个多项式,不化简
  • static Poly multPoly(Poly src1,Poly src2)实现两个多项式相乘,不化简

simplify

运行逻辑:

  • 生成一个新的Poly类对象ret
  • 对termList的每个项调用simplify方法进行简化并合并入成多项式ret
    • 合并成多项式时合并同类项,每调用一次mergeAndSimplify就合并一次
    • ret内部状态是已被化简的
  • 根据指数展开多项式,并化简
  • 设置simplifyFlag = true,返回ret

polymultPoly

实现两个多项式相乘

  • 先对两个多项式进行化简
  • 遍历两个多项式的每个项,进行乘法运算然后相加合并成一个多项式并化简返回

Term

表示一个项,管理所有的因子

成员变量

FactorList factorList

方法

Poly simplify():将该项各因子进行简化(去括号)

simplify

运行逻辑:

  • 建立一个新的Poly类对象poly
  • 检查自身是否已经被化简,若是,则将自身加入poly中并返回
  • 遍历factorList
    • 记录所有的常数因子和所有的变量因子
    • 遇到第一个多项式因子直接合并入poly中,并化简,若不是第一个,调用方法Poly.polymultPoly将该因子与poly合并为一个新多项式并赋值给poly
  • 将常数因子和变量因子组成Poly类对象ret,若poly中没有项,判断poly是否因为合并而变为空,若不是,则直接返回ret,然后设simplifyFlag = true,调用方法polyMultPoly合并入ret中
  • 并返回ret
posted @ 2022-03-26 15:57  OUZHUOJIAN  阅读(61)  评论(1编辑  收藏  举报