383
社区成员
开学第一周接触这门课时,看到第一页PPT上强调上学期学先导课的重要性,突然感觉有些荒谬。上学期的先导课抽签没中时其实并没什么感觉,导师也只是说“推荐选,对以后的课有些帮助”,甚至在后来听到同学们吐槽这门叫做“c++与c#程序设计”的课居然留JAVA作业时,心里有些庆幸没抽中。而且由于这门课的名字甚至寒假自学的是c++。于是本学期开学,完全是个JAVA小白的我迷茫的迎来了第一次作业。
五天速成JAVA没能让我按时交上这次作业,自然后面两次也都没能成功,大家开始讨论求导因子的处理方法时,我才搞懂自定义函数。再加上os课下实验,导致我每次大概弄明白作业时,下次作业都已经要结束了。其实想要参加第一次的补交,但既没生病也没缓考,单纯因为自己菜导致的没交上,还是算了。马上第二单元,一切重新开始吧。而且写的代码都只是本地过了加上和参加互测的同学对了一下,基本都没交上去正式测过,全都写上有些献丑,就简单写下第一次的吧。
main类
Lexer类
词法分析器,用于解析数学表达式。
Parser类
表达式解析器。
Expr类
getTerms(): 返回一个ArrayList<Term>类型的terms,表示表达式中的项。
getExpo(): 返回一个整数类型的expo,表示指数。
setExpo(int expo): 设置指数为给定的整数类型的expo。
addTerm(Term term): 添加一个给定的Term对象到terms列表中。
toPoly(): 将Expr对象转换为Poly对象。
Factor类
一个接口定义。
Number类
表示一个数值因子。
num:一个BigInteger类型的私有变量,表示该数值因子的值。
Number(BigInteger num):接受一个BigInteger类型的参数,表示该数值因子的值。
toString():返回该数值因子的字符串表示。
toPoly():将该数值因子转化为一个多项式类型(Poly),该多项式只有一个基本项,系数为num,指数分别为0(x)、0(y)、0(z)。
Power类
用于表示一个幂次表达式。
该类包含了一个构造函数Power(String name)。在构造函数中,指数默认为1。还包含了一个setExpo(int expo)函数,用于设置指数的值。
实现了Factor接口,并重写了toPoly()方法,将幂次表达式转换为多项式,即生成一个包含了一个Basic对象的ArrayList列表,并使用该列表创建一个Poly对象。
Term类
用于表示多项式的单个项。
factor: 一个ArrayList类型的变量,存储该项的因子。
sign: 一个整型变量,存储该项的符号。
Term(): 初始化一个空的项,其中 factors 初始化为空列表,sign 初始化为1。
addFactor(Factor factor): 向该项中添加一个因子,参数为一个Factor 类型的对象。
getFactors(): 获取该项的因子列表。
getSign(): 获取该项的符号。
reverseSign(): 将该项的符号取反。
toPoly(): 该项转换为一个Poly类型的多项式对象。
Basic类
用于表示三元多项式中的一个基本项。
Poly类
用于表示多项式。
ArrayList<Basic> basicArrayList: 存储多项式的标准项数组。
ArrayList<Basic> getBasicArrayList(): 获取多项式的标准项数组。
Poly(ArrayList<Basic> basicArrayList): 用于初始化多项式。
addPoly(Poly that): 相加。
mulPoly(Poly that): 相乘。
powPoly(int expo): 幂次方。
negate(): 取相反数,即正负翻转。
@Override public String toString(): 将多项式转换为字符串形式,并返回字符串。
没参加互测也没被hack过,自己的评测机倒是过了,那就先不分析bug了。
一开始是写了个c语言的代码,然后试图把它翻译成刚学几天的JAVA,结果大败而归,后来才发现大家都有好多类,不像我的c文件一下几百行。而且据老师上课讲的,这样写第二三次就寄了,所以开始尝试直接用JAVA。
最初一头雾水,写JAVA像写c,但感谢大佬同学分享的思路和架构,感觉明白了不少。
对于面向对象的思想有了基本的了解。大概搞懂JAVA和c的本质区别了。
因为毫无基础,一开始真的超级焦虑,担心自己连补给站都进不了,后来反而想通了,焦虑也没什么用,不如多请教别人。
据说本学期最难的第三次所以已经过去了,希望之后的作业能顺利一点吧。
你有一点说的非常到位,多请教。我的建议是,多思考,多做一些准备工作。相信困难都是暂时的