1. 程式人生 > 其它 >面向物件第一單元部落格

面向物件第一單元部落格

面向物件第一單元部落格

這次作業由於各種原因只完成第三次作業,在此對第三次作業的一些設計進行分享

類設計

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