第一次作业

第一次作业是对仅由幂函数构成的多项式求导。

主要是正则表达式的学习和基础的java语法。

在写之前,需要花一定的时间写出正确的正则表达式,这样能大大减少之后debug的时间。

写出来的正则表达式是这样的:

 "(\\+|\\-)(\\s)*(\\+|\\-)?"+"(((((\\d+)(\\s)*(\\*)(\\s)*)|\\s*)(x)"+"(\\s)*((\\^)(\\s)*(\\+|\\-)?(\\d+))"+"?(\\s)*)|(\\d+))(\\s)*"

在第一次同学分享以及老师点评的过程中,我意识到自己以下方面的不足:

1.写之前思考不够。在动手写代码之前,应该仔细阅读题目的要求(比如输入输出),分析代码应具备的结构,这样之后写代码的时候会节省很多中间思考的时间。

2.对面向对象的理解不够。比如老师提到的“如果需要更改输入的形式,是否可以快速修改代码”,我的代码就没有做到输入为单独的一个InputHandler类而输出为一个单独的OutputHandler类。

第二次作业

新增要求:

1.项可由多个因子相乘

2.因子可以为三角函数sin(x)和cos(x)

首先是在上周老师和同学的启发下对代码进行了大改,努力对结构进行优化。

虽然方法数量变多了,但是结构更加清晰,自我感觉代码的可读性和可移植性也有提高。

新的要求使得求导部分变难很多,没有想到更优方法的情况下,强行将每一项化成a, b*x, c*sin(x), d^cos(x).

第三次作业

 需要支持表达式因子的复杂的多项式。

这次对于整个架构的思考非常混乱,不知道从哪里开始下手。

因为不再能用统一的形式去表示一个项,所以自然的想到用继承。所有的因子都去重写一个Factor的父类的方法。但是最后还是没有缕清思路。

在第二次的研讨课上,认真听取同学的分析和老师的点评,好像才有一点拨云见日的感觉。

感想

1.研讨课的收获非常多。同学也会碰到和自己相同的问题,所以听取他们的经验和教训有非常深的感触,踩过的雷如何排除,这次幸运没有踩到的雷下次应该怎么避免。以及老师从更高维度的“上帝视角”对于整体架构的指点非常有启发性。

2.对java的各种库函数的了解不够。很多时候冥思苦想一个函数,其实库函数中早就包含了,多查资料了解可以节省大量时间。

3.对于面向对象的思想掌握还有缺乏,有时候还是会用面向过程的想法去写。